diff --git a/examples/amm/tealscript_artifacts/ConstantProductAMM.json b/examples/amm/tealscript_artifacts/ConstantProductAMM.json index efb9279ca..bb18f0290 100644 --- a/examples/amm/tealscript_artifacts/ConstantProductAMM.json +++ b/examples/amm/tealscript_artifacts/ConstantProductAMM.json @@ -1 +1,213 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{"governor":{"type":"bytes","key":"governor"},"assetA":{"type":"uint64","key":"assetA"},"assetB":{"type":"uint64","key":"assetB"},"poolToken":{"type":"uint64","key":"poolToken"},"ratio":{"type":"uint64","key":"ratio"}},"reserved":{}}},"state":{"global":{"num_byte_slices":1,"num_uints":4},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjEKCS8vIHRoaXMuZ292ZXJub3IucHV0KHRoaXMudHhuLnNlbmRlcikKCWJ5dGUgImciCgl0eG4gU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgpkb0NyZWF0ZVBvb2xUb2tlbjoKCXByb3RvIDIgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyNwoJLy8gcmV0dXJuIHNlbmRBc3NldENyZWF0aW9uKHsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjI4CgkvLyBjb25maWdBc3NldE5hbWU6ICdEUFQtJyArIGFBc3NldC51bml0TmFtZSArICctJyArIGJBc3NldC51bml0TmFtZQoJYnl0ZSAiRFBULSIKCWZyYW1lX2RpZyAtMSAvLyBhQXNzZXQ6IGFzc2V0Cglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKCWFzc2VydAoJY29uY2F0CglieXRlICItIgoJY29uY2F0CglmcmFtZV9kaWcgLTIgLy8gYkFzc2V0OiBhc3NldAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCglhc3NlcnQKCWNvbmNhdAoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjkKCS8vIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6ICdkcHQnCglieXRlICJkcHQiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzAKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IFRPVEFMX1NVUFBMWQoJaW50IDEwXzAwMF8wMDBfMDAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzEKCS8vIGNvbmZpZ0Fzc2V0RGVjaW1hbHM6IDMKCWludCAzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzIKCS8vIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozMwoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjM0CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCXJldHN1YgoKZG9BeGZlcjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQwCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NDEKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogYXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQyCgkvLyBhc3NldEFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTMgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NDMKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgpkb09wdEluOgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQ4CgkvLyB0aGlzLmRvQXhmZXIodGhpcy5hcHAuYWRkcmVzcywgYXNzZXQsIDApCglpbnQgMAoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBhc3NldAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CgljYWxsc3ViIGRvQXhmZXIKCXJldHN1YgoKdG9rZW5zVG9NaW50SW50aWFsOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjUyCgkvLyByZXR1cm4gc3FydChhQW1vdW50ICogYkFtb3VudCk7CglmcmFtZV9kaWcgLTEgLy8gYUFtb3VudDogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYkFtb3VudDogdWludDY0CgkqCglzcXJ0CglyZXRzdWIKCnRva2Vuc1RvTWludDoKCXByb3RvIDggMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo2MgoJLy8gYVJhdGlvID0gd2lkZVJhdGlvKFthQW1vdW50LCBTQ0FMRV0sIFthU3VwcGx5XSkKCWZyYW1lX2RpZyAtNCAvLyBhQW1vdW50OiB1aW50NjQKCWludCAxXzAwMAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAtMiAvLyBhU3VwcGx5OiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCglhc3NlcnQKCWZyYW1lX2J1cnkgLTYgLy8gYVJhdGlvOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NjMKCS8vIGJSYXRpbyA9IHdpZGVSYXRpbyhbYkFtb3VudCwgU0NBTEVdLCBbYlN1cHBseV0pCglmcmFtZV9kaWcgLTUgLy8gYkFtb3VudDogdWludDY0CglpbnQgMV8wMDAKCW11bHcKCWludCAwCglmcmFtZV9kaWcgLTMgLy8gYlN1cHBseTogdWludDY0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoJYXNzZXJ0CglmcmFtZV9idXJ5IC03IC8vIGJSYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjY1CgkvLyByYXRpbyA9IGFSYXRpbyA8IGJSYXRpbyA/IGFSYXRpbyA6IGJSYXRpbwoJZnJhbWVfZGlnIC02IC8vIGFSYXRpbzogdWludDY0CglmcmFtZV9kaWcgLTcgLy8gYlJhdGlvOiB1aW50NjQKCTwKCWJ6IHRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTYgLy8gYVJhdGlvOiB1aW50NjQKCWIgdGVybmFyeTBfZW5kCgp0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtNyAvLyBiUmF0aW86IHVpbnQ2NAoKdGVybmFyeTBfZW5kOgoJZnJhbWVfYnVyeSAtOCAvLyByYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjY3CgkvLyByZXR1cm4gd2lkZVJhdGlvKFtyYXRpbywgaXNzdWVkXSwgW1NDQUxFXSk7CglmcmFtZV9kaWcgLTggLy8gcmF0aW86IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIGlzc3VlZDogdWludDY0CgltdWx3CglpbnQgMAoJaW50IDFfMDAwCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoJYXNzZXJ0CglyZXRzdWIKCmNvbXB1dGVSYXRpbzoKCXByb3RvIDAgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3MQoJLy8gcmV0dXJuIHdpZGVSYXRpbygKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYnl0ZSAiYSIKCWFwcF9nbG9iYWxfZ2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJaW50IDFfMDAwCgltdWx3CglpbnQgMAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglieXRlICJiIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoJYXNzZXJ0CglyZXRzdWIKCnRva2Vuc1RvQnVybjoKCXByb3RvIDMgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3OAoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbc3VwcGx5LCBhbW91bnRdLCBbaXNzdWVkXSk7CglmcmFtZV9kaWcgLTIgLy8gc3VwcGx5OiB1aW50NjQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnQ6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAtMSAvLyBpc3N1ZWQ6IHVpbnQ2NAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCWFzc2VydAoJcmV0c3ViCgp0b2tlbnNUb1N3YXA6Cglwcm90byA0IDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6ODIKCS8vIGZhY3RvciA9IFNDQUxFIC0gRkVFCglpbnQgMV8wMDAKCWludCA1CgktCglmcmFtZV9idXJ5IC00IC8vIGZhY3RvcjogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjgzCgkvLyByZXR1cm4gd2lkZVJhdGlvKAoJZnJhbWVfZGlnIC0xIC8vIGluQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBmYWN0b3I6IHVpbnQ2NAoJbXVsdwoJZnJhbWVfZGlnIC0zIC8vIG91dFN1cHBseTogdWludDY0Cgl1bmNvdmVyIDIKCWRpZyAxCgkqCgljb3ZlciAyCgltdWx3Cgljb3ZlciAyCgkrCglzd2FwCglpbnQgMAoJZnJhbWVfZGlnIC0yIC8vIGluU3VwcGx5OiB1aW50NjQKCWludCAxXzAwMAoJKgoJZnJhbWVfZGlnIC0xIC8vIGluQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBmYWN0b3I6IHVpbnQ2NAoJKgoJKwoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfc2V0X2dvdmVybm9yOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBzZXRfZ292ZXJub3IKCWludCAxCglyZXR1cm4KCnNldF9nb3Zlcm5vcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5MAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5nb3Zlcm5vci5nZXQoKSkKCXR4biBTZW5kZXIKCWJ5dGUgImciCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5MQoJLy8gdGhpcy5nb3Zlcm5vci5wdXQoZ292ZXJub3IpCglieXRlICJnIgoJZnJhbWVfZGlnIC0xIC8vIGdvdmVybm9yOiBhY2NvdW50CglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgphYmlfcm91dGVfYm9vdHN0cmFwOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIGJvb3RzdHJhcAoJaW50IDEKCXJldHVybgoKYm9vdHN0cmFwOgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmdvdmVybm9yLmdldCgpKQoJdHhuIFNlbmRlcgoJYnl0ZSAiZyIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk3CgkvLyBhc3NlcnQoZ2xvYmFscy5ncm91cFNpemUgPT09IDIpCglnbG9iYWwgR3JvdXBTaXplCglpbnQgMgoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5OAoJLy8gYXNzZXJ0KHNlZWQucmVjZWl2ZXIgPT09IHRoaXMuYXBwLmFkZHJlc3MpCglmcmFtZV9kaWcgLTEgLy8gc2VlZDogcGF5CglndHhucyBSZWNlaXZlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk5CgkvLyBhc3NlcnQoc2VlZC5hbW91bnQgPj0gMzAwXzAwMCkKCWZyYW1lX2RpZyAtMSAvLyBzZWVkOiBwYXkKCWd0eG5zIEFtb3VudAoJaW50IDMwMF8wMDAKCT49Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTAwCgkvLyBhc3NlcnQoYUFzc2V0IDwgYkFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IGFzc2V0Cgk8Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTAyCgkvLyB0aGlzLmFzc2V0QS5wdXQoYUFzc2V0KQoJYnl0ZSAiYSIKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IGFzc2V0CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDMKCS8vIHRoaXMuYXNzZXRCLnB1dChiQXNzZXQpCglieXRlICJiIgoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogYXNzZXQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEwNAoJLy8gdGhpcy5wb29sVG9rZW4ucHV0KHRoaXMuZG9DcmVhdGVQb29sVG9rZW4oYUFzc2V0LCBiQXNzZXQpKQoJYnl0ZSAicCIKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IGFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJY2FsbHN1YiBkb0NyZWF0ZVBvb2xUb2tlbgoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTA2CgkvLyB0aGlzLmRvT3B0SW4oYUFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogYXNzZXQKCWNhbGxzdWIgZG9PcHRJbgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDcKCS8vIHRoaXMuZG9PcHRJbihiQXNzZXQpCglmcmFtZV9kaWcgLTMgLy8gYkFzc2V0OiBhc3NldAoJY2FsbHN1YiBkb09wdEluCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEwOQoJLy8gcmV0dXJuIHRoaXMucG9vbFRva2VuLmdldCgpOwoJYnl0ZSAicCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9taW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4biBHcm91cEluZGV4CglpbnQgMgoJLQoJY2FsbHN1YiBtaW50CglpbnQgMQoJcmV0dXJuCgptaW50OgoJcHJvdG8gNiAwCgoJLy8gd2VsbCBmb3JtZWQgbWludAoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMAoJLy8gYXNzZXJ0KGFBc3NldCA9PT0gdGhpcy5hc3NldEEuZ2V0KCkpCglmcmFtZV9kaWcgLTQgLy8gYUFzc2V0OiBhc3NldAoJYnl0ZSAiYSIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMQoJLy8gYXNzZXJ0KGJBc3NldCA9PT0gdGhpcy5hc3NldEIuZ2V0KCkpCglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBhc3NldAoJYnl0ZSAiYiIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMgoJLy8gYXNzZXJ0KHBvb2xBc3NldCA9PT0gdGhpcy5wb29sVG9rZW4uZ2V0KCkpCglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBhc3NldAoJYnl0ZSAicCIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMwoJLy8gYXNzZXJ0KGFYZmVyLnNlbmRlciA9PT0gdGhpcy50eG4uc2VuZGVyICYmIGJYZmVyLnNlbmRlciA9PT0gdGhpcy50eG4uc2VuZGVyKQoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoJZHVwCglieiBza2lwX2FuZDAKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCSYmCgpza2lwX2FuZDA6Cglhc3NlcnQKCgkvLyB2YWxpZCBhc3NldCBBIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTI2CgkvLyBhc3NlcnQoYVhmZXIuYXNzZXRSZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMjcKCS8vIGFzc2VydChhWGZlci54ZmVyQXNzZXQgPT09IGFBc3NldCkKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogYXhmZXIKCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC00IC8vIGFBc3NldDogYXNzZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTI4CgkvLyBhc3NlcnQoYVhmZXIuYXNzZXRBbW91bnQgPiAwKQoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyB2YWxpZCBhc3NldCBCIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTMxCgkvLyBhc3NlcnQoYlhmZXIuYXNzZXRSZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMzIKCS8vIGFzc2VydChiWGZlci54ZmVyQXNzZXQgPT09IGJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogYXNzZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTMzCgkvLyBhc3NlcnQoYlhmZXIuYXNzZXRBbW91bnQgPiAwKQoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTM2CgkvLyB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShhQXNzZXQpID09PSBhWGZlci5hc3NldEFtb3VudAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTQgLy8gYUFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50Cgk9PQoJZHVwCglieiBza2lwX2FuZDEKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogYXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJPT0KCSYmCgpza2lwX2FuZDE6CglieiBpZjBfZWxzZQoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTM5CgkvLyB0aGlzLnRva2Vuc1RvTWludEludGlhbChhWGZlci5hc3NldEFtb3VudCwgYlhmZXIuYXNzZXRBbW91bnQpCglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWNhbGxzdWIgdG9rZW5zVG9NaW50SW50aWFsCgliIGlmMF9lbmQKCmlmMF9lbHNlOgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE0MQoJLy8gdG9NaW50ID0gdGhpcy50b2tlbnNUb01pbnQoCglieXRlIDB4CglkdXBuIDIKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CgktCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNCAvLyBhQXNzZXQ6IGFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCS0KCWludCAxMF8wMDBfMDAwXzAwMAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCS0KCWNhbGxzdWIgdG9rZW5zVG9NaW50CglmcmFtZV9idXJ5IC02IC8vIHRvTWludDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE0OQoJLy8gYXNzZXJ0KHRvTWludCA+IDApCglmcmFtZV9kaWcgLTYgLy8gdG9NaW50OiB1aW50NjQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTUxCgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBwb29sQXNzZXQsIHRvTWludCkKCWZyYW1lX2RpZyAtNiAvLyB0b01pbnQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0zIC8vIHBvb2xBc3NldDogYXNzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKaWYwX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2J1cm46Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cG4gMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoJdHhuYXMgQXNzZXRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIGJ1cm4KCWludCAxCglyZXR1cm4KCmJ1cm46Cglwcm90byA3IDAKCgkvLyB3ZWxsIGZvcm1lZCBidXJuCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTYyCgkvLyBhc3NlcnQocG9vbEFzc2V0ID09PSB0aGlzLnBvb2xUb2tlbi5nZXQoKSkKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXNzZXQ6IGFzc2V0CglieXRlICJwIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTYzCgkvLyBhc3NlcnQoYUFzc2V0ID09PSB0aGlzLmFzc2V0QS5nZXQoKSkKCWZyYW1lX2RpZyAtMyAvLyBhQXNzZXQ6IGFzc2V0CglieXRlICJhIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY0CgkvLyBhc3NlcnQoYkFzc2V0ID09PSB0aGlzLmFzc2V0Qi5nZXQoKSkKCWZyYW1lX2RpZyAtNCAvLyBiQXNzZXQ6IGFzc2V0CglieXRlICJiIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY1CgkvLyBhc3NlcnQocG9vbFhmZXIuc2VuZGVyID09PSB0aGlzLnR4bi5zZW5kZXIpCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IGF4ZmVyCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyB2YWxpZCBwb29sIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY4CgkvLyBhc3NlcnQocG9vbFhmZXIuYXNzZXRSZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNjkKCS8vIGFzc2VydChwb29sWGZlci54ZmVyQXNzZXQgPT09IHBvb2xBc3NldCkKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC0yIC8vIHBvb2xBc3NldDogYXNzZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTcwCgkvLyBhc3NlcnQocG9vbFhmZXIuYXNzZXRBbW91bnQgPiAwKQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTcxCgkvLyBhc3NlcnQocG9vbFhmZXIuc2VuZGVyID09PSB0aGlzLnR4bi5zZW5kZXIpCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IGF4ZmVyCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTczCgkvLyBpc3N1ZWQgPSBUT1RBTF9TVVBQTFkKCWludCAxMF8wMDBfMDAwXzAwMAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CgktCgktCglmcmFtZV9idXJ5IC01IC8vIGlzc3VlZDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE3NwoJLy8gYUFtdCA9IHRoaXMudG9rZW5zVG9CdXJuKAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIGFBc3NldDogYXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9kaWcgLTUgLy8gaXNzdWVkOiB1aW50NjQKCWNhbGxzdWIgdG9rZW5zVG9CdXJuCglmcmFtZV9idXJ5IC02IC8vIGFBbXQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxODMKCS8vIGJBbXQgPSB0aGlzLnRva2Vuc1RvQnVybigKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNCAvLyBiQXNzZXQ6IGFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJZnJhbWVfZGlnIC01IC8vIGlzc3VlZDogdWludDY0CgljYWxsc3ViIHRva2Vuc1RvQnVybgoJZnJhbWVfYnVyeSAtNyAvLyBiQW10OiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTg5CgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBhQXNzZXQsIGFBbXQpCglmcmFtZV9kaWcgLTYgLy8gYUFtdDogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gYUFzc2V0OiBhc3NldAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBkb0F4ZmVyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE5MAoJLy8gdGhpcy5kb0F4ZmVyKHRoaXMudHhuLnNlbmRlciwgYkFzc2V0LCBiQW10KQoJZnJhbWVfZGlnIC03IC8vIGJBbXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC00IC8vIGJBc3NldDogYXNzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTIKCS8vIHRoaXMucmF0aW8ucHV0KHRoaXMuY29tcHV0ZVJhdGlvKCkpCglieXRlICJyIgoJY2FsbHN1YiBjb21wdXRlUmF0aW8KCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9zd2FwOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWNhbGxzdWIgc3dhcAoJaW50IDEKCXJldHVybgoKc3dhcDoKCXByb3RvIDYgMAoKCS8vIHdlbGwgZm9ybWVkIHN3YXAKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTcKCS8vIGFzc2VydChhQXNzZXQgPT09IHRoaXMuYXNzZXRBLmdldCgpKQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogYXNzZXQKCWJ5dGUgImEiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTgKCS8vIGFzc2VydChiQXNzZXQgPT09IHRoaXMuYXNzZXRCLmdldCgpKQoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogYXNzZXQKCWJ5dGUgImIiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIHZhbGlkIHN3YXAgeGZlcgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwMQoJLy8gYXNzZXJ0KAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJPT0KCWR1cAoJYm56IHNraXBfb3IwCglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IGF4ZmVyCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IGFzc2V0Cgk9PQoJfHwKCnNraXBfb3IwOgoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwNAoJLy8gYXNzZXJ0KHN3YXBYZmVyLmFzc2V0QW1vdW50ID4gMCkKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CglpbnQgMAoJPgoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwNQoJLy8gYXNzZXJ0KHN3YXBYZmVyLnNlbmRlciA9PT0gdGhpcy50eG4uc2VuZGVyKQoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwNwoJLy8gb3V0SWQgPSBzd2FwWGZlci54ZmVyQXNzZXQgPT09IGFBc3NldCA/IGFBc3NldCA6IGJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJPT0KCWJ6IHRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJYiB0ZXJuYXJ5MV9lbmQKCnRlcm5hcnkxX2ZhbHNlOgoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogYXNzZXQKCnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgLTQgLy8gb3V0SWQ6IGFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwOQoJLy8gaW5JZCA9IHN3YXBYZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9idXJ5IC01IC8vIGluSWQ6IGFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIxMQoJLy8gdG9Td2FwID0gdGhpcy50b2tlbnNUb1N3YXAoCglieXRlIDB4Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNCAvLyBvdXRJZDogYXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNSAvLyBpbklkOiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CgktCglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJY2FsbHN1YiB0b2tlbnNUb1N3YXAKCWZyYW1lX2J1cnkgLTYgLy8gdG9Td2FwOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjE3CgkvLyBhc3NlcnQodG9Td2FwID4gMCkKCWZyYW1lX2RpZyAtNiAvLyB0b1N3YXA6IHVpbnQ2NAoJaW50IDAKCT4KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyMTkKCS8vIHRoaXMuZG9BeGZlcih0aGlzLnR4bi5zZW5kZXIsIG91dElkLCB0b1N3YXApCglmcmFtZV9kaWcgLTYgLy8gdG9Td2FwOiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBvdXRJZDogYXNzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyMjEKCS8vIHRoaXMucmF0aW8ucHV0KHRoaXMuY29tcHV0ZVJhdGlvKCkpCglieXRlICJyIgoJY2FsbHN1YiBjb21wdXRlUmF0aW8KCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgInNldF9nb3Zlcm5vcihhY2NvdW50KXZvaWQiCgltZXRob2QgImJvb3RzdHJhcChwYXksYXNzZXQsYXNzZXQpdWludDY0IgoJbWV0aG9kICJtaW50KGF4ZmVyLGF4ZmVyLGFzc2V0LGFzc2V0LGFzc2V0KXZvaWQiCgltZXRob2QgImJ1cm4oYXhmZXIsYXNzZXQsYXNzZXQsYXNzZXQpdm9pZCIKCW1ldGhvZCAic3dhcChheGZlcixhc3NldCxhc3NldCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX3NldF9nb3Zlcm5vciBhYmlfcm91dGVfYm9vdHN0cmFwIGFiaV9yb3V0ZV9taW50IGFiaV9yb3V0ZV9idXJuIGFiaV9yb3V0ZV9zd2Fw","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"ConstantProductAMM","desc":"","methods":[{"name":"set_governor","args":[{"name":"governor","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"bootstrap","args":[{"name":"seed","type":"pay","desc":""},{"name":"aAsset","type":"asset","desc":""},{"name":"bAsset","type":"asset","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"mint","args":[{"name":"aXfer","type":"axfer","desc":""},{"name":"bXfer","type":"axfer","desc":""},{"name":"poolAsset","type":"asset","desc":""},{"name":"aAsset","type":"asset","desc":""},{"name":"bAsset","type":"asset","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"burn","args":[{"name":"poolXfer","type":"axfer","desc":""},{"name":"poolAsset","type":"asset","desc":""},{"name":"aAsset","type":"asset","desc":""},{"name":"bAsset","type":"asset","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"swap","args":[{"name":"swapXfer","type":"axfer","desc":""},{"name":"aAsset","type":"asset","desc":""},{"name":"bAsset","type":"asset","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "set_governor(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "bootstrap(pay,asset,asset)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "mint(axfer,axfer,asset,asset,asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "burn(axfer,asset,asset,asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "swap(axfer,asset,asset)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "governor": { + "type": "bytes", + "key": "governor" + }, + "assetA": { + "type": "uint64", + "key": "assetA" + }, + "assetB": { + "type": "uint64", + "key": "assetB" + }, + "poolToken": { + "type": "uint64", + "key": "poolToken" + }, + "ratio": { + "type": "uint64", + "key": "ratio" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 4 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjEKCS8vIHRoaXMuZ292ZXJub3IucHV0KHRoaXMudHhuLnNlbmRlcikKCWJ5dGUgImciCgl0eG4gU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgpkb0NyZWF0ZVBvb2xUb2tlbjoKCXByb3RvIDIgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyNwoJLy8gcmV0dXJuIHNlbmRBc3NldENyZWF0aW9uKHsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjI4CgkvLyBjb25maWdBc3NldE5hbWU6ICdEUFQtJyArIGFBc3NldC51bml0TmFtZSArICctJyArIGJBc3NldC51bml0TmFtZQoJYnl0ZSAiRFBULSIKCWZyYW1lX2RpZyAtMSAvLyBhQXNzZXQ6IGFzc2V0Cglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKCWFzc2VydAoJY29uY2F0CglieXRlICItIgoJY29uY2F0CglmcmFtZV9kaWcgLTIgLy8gYkFzc2V0OiBhc3NldAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCglhc3NlcnQKCWNvbmNhdAoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjkKCS8vIGNvbmZpZ0Fzc2V0VW5pdE5hbWU6ICdkcHQnCglieXRlICJkcHQiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzAKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IFRPVEFMX1NVUFBMWQoJaW50IDEwXzAwMF8wMDBfMDAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzEKCS8vIGNvbmZpZ0Fzc2V0RGVjaW1hbHM6IDMKCWludCAzCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MzIKCS8vIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozMwoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjM0CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCXJldHN1YgoKZG9BeGZlcjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czozOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQwCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NDEKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogYXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQyCgkvLyBhc3NldEFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTMgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NDMKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgpkb09wdEluOgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjQ4CgkvLyB0aGlzLmRvQXhmZXIodGhpcy5hcHAuYWRkcmVzcywgYXNzZXQsIDApCglpbnQgMAoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBhc3NldAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CgljYWxsc3ViIGRvQXhmZXIKCXJldHN1YgoKdG9rZW5zVG9NaW50SW50aWFsOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjUyCgkvLyByZXR1cm4gc3FydChhQW1vdW50ICogYkFtb3VudCk7CglmcmFtZV9kaWcgLTEgLy8gYUFtb3VudDogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYkFtb3VudDogdWludDY0CgkqCglzcXJ0CglyZXRzdWIKCnRva2Vuc1RvTWludDoKCXByb3RvIDggMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo2MgoJLy8gYVJhdGlvID0gd2lkZVJhdGlvKFthQW1vdW50LCBTQ0FMRV0sIFthU3VwcGx5XSkKCWZyYW1lX2RpZyAtNCAvLyBhQW1vdW50OiB1aW50NjQKCWludCAxXzAwMAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAtMiAvLyBhU3VwcGx5OiB1aW50NjQKCWRpdm1vZHcKCXBvcAoJcG9wCglzd2FwCgkhCglhc3NlcnQKCWZyYW1lX2J1cnkgLTYgLy8gYVJhdGlvOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6NjMKCS8vIGJSYXRpbyA9IHdpZGVSYXRpbyhbYkFtb3VudCwgU0NBTEVdLCBbYlN1cHBseV0pCglmcmFtZV9kaWcgLTUgLy8gYkFtb3VudDogdWludDY0CglpbnQgMV8wMDAKCW11bHcKCWludCAwCglmcmFtZV9kaWcgLTMgLy8gYlN1cHBseTogdWludDY0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoJYXNzZXJ0CglmcmFtZV9idXJ5IC03IC8vIGJSYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjY1CgkvLyByYXRpbyA9IGFSYXRpbyA8IGJSYXRpbyA/IGFSYXRpbyA6IGJSYXRpbwoJZnJhbWVfZGlnIC02IC8vIGFSYXRpbzogdWludDY0CglmcmFtZV9kaWcgLTcgLy8gYlJhdGlvOiB1aW50NjQKCTwKCWJ6IHRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTYgLy8gYVJhdGlvOiB1aW50NjQKCWIgdGVybmFyeTBfZW5kCgp0ZXJuYXJ5MF9mYWxzZToKCWZyYW1lX2RpZyAtNyAvLyBiUmF0aW86IHVpbnQ2NAoKdGVybmFyeTBfZW5kOgoJZnJhbWVfYnVyeSAtOCAvLyByYXRpbzogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjY3CgkvLyByZXR1cm4gd2lkZVJhdGlvKFtyYXRpbywgaXNzdWVkXSwgW1NDQUxFXSk7CglmcmFtZV9kaWcgLTggLy8gcmF0aW86IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIGlzc3VlZDogdWludDY0CgltdWx3CglpbnQgMAoJaW50IDFfMDAwCglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoJYXNzZXJ0CglyZXRzdWIKCmNvbXB1dGVSYXRpbzoKCXByb3RvIDAgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3MQoJLy8gcmV0dXJuIHdpZGVSYXRpbygKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYnl0ZSAiYSIKCWFwcF9nbG9iYWxfZ2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJaW50IDFfMDAwCgltdWx3CglpbnQgMAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglieXRlICJiIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0CglkaXZtb2R3Cglwb3AKCXBvcAoJc3dhcAoJIQoJYXNzZXJ0CglyZXRzdWIKCnRva2Vuc1RvQnVybjoKCXByb3RvIDMgMQoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo3OAoJLy8gcmV0dXJuIHdpZGVSYXRpbyhbc3VwcGx5LCBhbW91bnRdLCBbaXNzdWVkXSk7CglmcmFtZV9kaWcgLTIgLy8gc3VwcGx5OiB1aW50NjQKCWZyYW1lX2RpZyAtMyAvLyBhbW91bnQ6IHVpbnQ2NAoJbXVsdwoJaW50IDAKCWZyYW1lX2RpZyAtMSAvLyBpc3N1ZWQ6IHVpbnQ2NAoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCWFzc2VydAoJcmV0c3ViCgp0b2tlbnNUb1N3YXA6Cglwcm90byA0IDEKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6ODIKCS8vIGZhY3RvciA9IFNDQUxFIC0gRkVFCglpbnQgMV8wMDAKCWludCA1CgktCglmcmFtZV9idXJ5IC00IC8vIGZhY3RvcjogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjgzCgkvLyByZXR1cm4gd2lkZVJhdGlvKAoJZnJhbWVfZGlnIC0xIC8vIGluQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBmYWN0b3I6IHVpbnQ2NAoJbXVsdwoJZnJhbWVfZGlnIC0zIC8vIG91dFN1cHBseTogdWludDY0Cgl1bmNvdmVyIDIKCWRpZyAxCgkqCgljb3ZlciAyCgltdWx3Cgljb3ZlciAyCgkrCglzd2FwCglpbnQgMAoJZnJhbWVfZGlnIC0yIC8vIGluU3VwcGx5OiB1aW50NjQKCWludCAxXzAwMAoJKgoJZnJhbWVfZGlnIC0xIC8vIGluQW1vdW50OiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBmYWN0b3I6IHVpbnQ2NAoJKgoJKwoJZGl2bW9kdwoJcG9wCglwb3AKCXN3YXAKCSEKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfc2V0X2dvdmVybm9yOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBzZXRfZ292ZXJub3IKCWludCAxCglyZXR1cm4KCnNldF9nb3Zlcm5vcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5MAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5nb3Zlcm5vci5nZXQoKSkKCXR4biBTZW5kZXIKCWJ5dGUgImciCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5MQoJLy8gdGhpcy5nb3Zlcm5vci5wdXQoZ292ZXJub3IpCglieXRlICJnIgoJZnJhbWVfZGlnIC0xIC8vIGdvdmVybm9yOiBhY2NvdW50CglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgphYmlfcm91dGVfYm9vdHN0cmFwOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIGJvb3RzdHJhcAoJaW50IDEKCXJldHVybgoKYm9vdHN0cmFwOgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmdvdmVybm9yLmdldCgpKQoJdHhuIFNlbmRlcgoJYnl0ZSAiZyIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk3CgkvLyBhc3NlcnQoZ2xvYmFscy5ncm91cFNpemUgPT09IDIpCglnbG9iYWwgR3JvdXBTaXplCglpbnQgMgoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czo5OAoJLy8gYXNzZXJ0KHNlZWQucmVjZWl2ZXIgPT09IHRoaXMuYXBwLmFkZHJlc3MpCglmcmFtZV9kaWcgLTEgLy8gc2VlZDogcGF5CglndHhucyBSZWNlaXZlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjk5CgkvLyBhc3NlcnQoc2VlZC5hbW91bnQgPj0gMzAwXzAwMCkKCWZyYW1lX2RpZyAtMSAvLyBzZWVkOiBwYXkKCWd0eG5zIEFtb3VudAoJaW50IDMwMF8wMDAKCT49Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTAwCgkvLyBhc3NlcnQoYUFzc2V0IDwgYkFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IGFzc2V0Cgk8Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTAyCgkvLyB0aGlzLmFzc2V0QS5wdXQoYUFzc2V0KQoJYnl0ZSAiYSIKCWZyYW1lX2RpZyAtMiAvLyBhQXNzZXQ6IGFzc2V0CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDMKCS8vIHRoaXMuYXNzZXRCLnB1dChiQXNzZXQpCglieXRlICJiIgoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogYXNzZXQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEwNAoJLy8gdGhpcy5wb29sVG9rZW4ucHV0KHRoaXMuZG9DcmVhdGVQb29sVG9rZW4oYUFzc2V0LCBiQXNzZXQpKQoJYnl0ZSAicCIKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IGFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJY2FsbHN1YiBkb0NyZWF0ZVBvb2xUb2tlbgoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTA2CgkvLyB0aGlzLmRvT3B0SW4oYUFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogYXNzZXQKCWNhbGxzdWIgZG9PcHRJbgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMDcKCS8vIHRoaXMuZG9PcHRJbihiQXNzZXQpCglmcmFtZV9kaWcgLTMgLy8gYkFzc2V0OiBhc3NldAoJY2FsbHN1YiBkb09wdEluCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEwOQoJLy8gcmV0dXJuIHRoaXMucG9vbFRva2VuLmdldCgpOwoJYnl0ZSAicCIKCWFwcF9nbG9iYWxfZ2V0CglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9taW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4biBHcm91cEluZGV4CglpbnQgMgoJLQoJY2FsbHN1YiBtaW50CglpbnQgMQoJcmV0dXJuCgptaW50OgoJcHJvdG8gNiAwCgoJLy8gd2VsbCBmb3JtZWQgbWludAoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMAoJLy8gYXNzZXJ0KGFBc3NldCA9PT0gdGhpcy5hc3NldEEuZ2V0KCkpCglmcmFtZV9kaWcgLTQgLy8gYUFzc2V0OiBhc3NldAoJYnl0ZSAiYSIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMQoJLy8gYXNzZXJ0KGJBc3NldCA9PT0gdGhpcy5hc3NldEIuZ2V0KCkpCglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBhc3NldAoJYnl0ZSAiYiIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMgoJLy8gYXNzZXJ0KHBvb2xBc3NldCA9PT0gdGhpcy5wb29sVG9rZW4uZ2V0KCkpCglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBhc3NldAoJYnl0ZSAicCIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjEyMwoJLy8gYXNzZXJ0KGFYZmVyLnNlbmRlciA9PT0gdGhpcy50eG4uc2VuZGVyICYmIGJYZmVyLnNlbmRlciA9PT0gdGhpcy50eG4uc2VuZGVyKQoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoJZHVwCglieiBza2lwX2FuZDAKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCSYmCgpza2lwX2FuZDA6Cglhc3NlcnQKCgkvLyB2YWxpZCBhc3NldCBBIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTI2CgkvLyBhc3NlcnQoYVhmZXIuYXNzZXRSZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMjcKCS8vIGFzc2VydChhWGZlci54ZmVyQXNzZXQgPT09IGFBc3NldCkKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogYXhmZXIKCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC00IC8vIGFBc3NldDogYXNzZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTI4CgkvLyBhc3NlcnQoYVhmZXIuYXNzZXRBbW91bnQgPiAwKQoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyB2YWxpZCBhc3NldCBCIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTMxCgkvLyBhc3NlcnQoYlhmZXIuYXNzZXRSZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxMzIKCS8vIGFzc2VydChiWGZlci54ZmVyQXNzZXQgPT09IGJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogYXNzZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTMzCgkvLyBhc3NlcnQoYlhmZXIuYXNzZXRBbW91bnQgPiAwKQoJZnJhbWVfZGlnIC0yIC8vIGJYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTM2CgkvLyB0aGlzLmFwcC5hZGRyZXNzLmFzc2V0QmFsYW5jZShhQXNzZXQpID09PSBhWGZlci5hc3NldEFtb3VudAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTQgLy8gYUFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyBhWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50Cgk9PQoJZHVwCglieiBza2lwX2FuZDEKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJZnJhbWVfZGlnIC01IC8vIGJBc3NldDogYXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJPT0KCSYmCgpza2lwX2FuZDE6CglieiBpZjBfZWxzZQoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTM5CgkvLyB0aGlzLnRva2Vuc1RvTWludEludGlhbChhWGZlci5hc3NldEFtb3VudCwgYlhmZXIuYXNzZXRBbW91bnQpCglmcmFtZV9kaWcgLTIgLy8gYlhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWNhbGxzdWIgdG9rZW5zVG9NaW50SW50aWFsCgliIGlmMF9lbmQKCmlmMF9lbHNlOgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE0MQoJLy8gdG9NaW50ID0gdGhpcy50b2tlbnNUb01pbnQoCglieXRlIDB4CglkdXBuIDIKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYVhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTUgLy8gYkFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMiAvLyBiWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CgktCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNCAvLyBhQXNzZXQ6IGFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJZnJhbWVfZGlnIC0xIC8vIGFYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCS0KCWludCAxMF8wMDBfMDAwXzAwMAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTMgLy8gcG9vbEFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCS0KCWNhbGxzdWIgdG9rZW5zVG9NaW50CglmcmFtZV9idXJ5IC02IC8vIHRvTWludDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE0OQoJLy8gYXNzZXJ0KHRvTWludCA+IDApCglmcmFtZV9kaWcgLTYgLy8gdG9NaW50OiB1aW50NjQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTUxCgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBwb29sQXNzZXQsIHRvTWludCkKCWZyYW1lX2RpZyAtNiAvLyB0b01pbnQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC0zIC8vIHBvb2xBc3NldDogYXNzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKaWYwX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2J1cm46Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cG4gMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJYnRvaQoJdHhuYXMgQXNzZXRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIGJ1cm4KCWludCAxCglyZXR1cm4KCmJ1cm46Cglwcm90byA3IDAKCgkvLyB3ZWxsIGZvcm1lZCBidXJuCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTYyCgkvLyBhc3NlcnQocG9vbEFzc2V0ID09PSB0aGlzLnBvb2xUb2tlbi5nZXQoKSkKCWZyYW1lX2RpZyAtMiAvLyBwb29sQXNzZXQ6IGFzc2V0CglieXRlICJwIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTYzCgkvLyBhc3NlcnQoYUFzc2V0ID09PSB0aGlzLmFzc2V0QS5nZXQoKSkKCWZyYW1lX2RpZyAtMyAvLyBhQXNzZXQ6IGFzc2V0CglieXRlICJhIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY0CgkvLyBhc3NlcnQoYkFzc2V0ID09PSB0aGlzLmFzc2V0Qi5nZXQoKSkKCWZyYW1lX2RpZyAtNCAvLyBiQXNzZXQ6IGFzc2V0CglieXRlICJiIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY1CgkvLyBhc3NlcnQocG9vbFhmZXIuc2VuZGVyID09PSB0aGlzLnR4bi5zZW5kZXIpCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IGF4ZmVyCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyB2YWxpZCBwb29sIGF4ZmVyCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTY4CgkvLyBhc3NlcnQocG9vbFhmZXIuYXNzZXRSZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxNjkKCS8vIGFzc2VydChwb29sWGZlci54ZmVyQXNzZXQgPT09IHBvb2xBc3NldCkKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIFhmZXJBc3NldAoJZnJhbWVfZGlnIC0yIC8vIHBvb2xBc3NldDogYXNzZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTcwCgkvLyBhc3NlcnQocG9vbFhmZXIuYXNzZXRBbW91bnQgPiAwKQoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCWludCAwCgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTcxCgkvLyBhc3NlcnQocG9vbFhmZXIuc2VuZGVyID09PSB0aGlzLnR4bi5zZW5kZXIpCglmcmFtZV9kaWcgLTEgLy8gcG9vbFhmZXI6IGF4ZmVyCglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTczCgkvLyBpc3N1ZWQgPSBUT1RBTF9TVVBQTFkKCWludCAxMF8wMDBfMDAwXzAwMAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gcG9vbEFzc2V0OiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CgktCgktCglmcmFtZV9idXJ5IC01IC8vIGlzc3VlZDogdWludDY0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE3NwoJLy8gYUFtdCA9IHRoaXMudG9rZW5zVG9CdXJuKAoJZnJhbWVfZGlnIC0xIC8vIHBvb2xYZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRBbW91bnQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIGFBc3NldDogYXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9kaWcgLTUgLy8gaXNzdWVkOiB1aW50NjQKCWNhbGxzdWIgdG9rZW5zVG9CdXJuCglmcmFtZV9idXJ5IC02IC8vIGFBbXQ6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxODMKCS8vIGJBbXQgPSB0aGlzLnRva2Vuc1RvQnVybigKCWZyYW1lX2RpZyAtMSAvLyBwb29sWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNCAvLyBiQXNzZXQ6IGFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJZnJhbWVfZGlnIC01IC8vIGlzc3VlZDogdWludDY0CgljYWxsc3ViIHRva2Vuc1RvQnVybgoJZnJhbWVfYnVyeSAtNyAvLyBiQW10OiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MTg5CgkvLyB0aGlzLmRvQXhmZXIodGhpcy50eG4uc2VuZGVyLCBhQXNzZXQsIGFBbXQpCglmcmFtZV9kaWcgLTYgLy8gYUFtdDogdWludDY0CglmcmFtZV9kaWcgLTMgLy8gYUFzc2V0OiBhc3NldAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBkb0F4ZmVyCgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjE5MAoJLy8gdGhpcy5kb0F4ZmVyKHRoaXMudHhuLnNlbmRlciwgYkFzc2V0LCBiQW10KQoJZnJhbWVfZGlnIC03IC8vIGJBbXQ6IHVpbnQ2NAoJZnJhbWVfZGlnIC00IC8vIGJBc3NldDogYXNzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTIKCS8vIHRoaXMucmF0aW8ucHV0KHRoaXMuY29tcHV0ZVJhdGlvKCkpCglieXRlICJyIgoJY2FsbHN1YiBjb21wdXRlUmF0aW8KCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9zd2FwOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFzc2V0cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWNhbGxzdWIgc3dhcAoJaW50IDEKCXJldHVybgoKc3dhcDoKCXByb3RvIDYgMAoKCS8vIHdlbGwgZm9ybWVkIHN3YXAKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTcKCS8vIGFzc2VydChhQXNzZXQgPT09IHRoaXMuYXNzZXRBLmdldCgpKQoJZnJhbWVfZGlnIC0yIC8vIGFBc3NldDogYXNzZXQKCWJ5dGUgImEiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoxOTgKCS8vIGFzc2VydChiQXNzZXQgPT09IHRoaXMuYXNzZXRCLmdldCgpKQoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogYXNzZXQKCWJ5dGUgImIiCglhcHBfZ2xvYmFsX2dldAoJPT0KCWFzc2VydAoKCS8vIHZhbGlkIHN3YXAgeGZlcgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwMQoJLy8gYXNzZXJ0KAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJPT0KCWR1cAoJYm56IHNraXBfb3IwCglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IGF4ZmVyCglndHhucyBYZmVyQXNzZXQKCWZyYW1lX2RpZyAtMyAvLyBiQXNzZXQ6IGFzc2V0Cgk9PQoJfHwKCnNraXBfb3IwOgoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwNAoJLy8gYXNzZXJ0KHN3YXBYZmVyLmFzc2V0QW1vdW50ID4gMCkKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CglpbnQgMAoJPgoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwNQoJLy8gYXNzZXJ0KHN3YXBYZmVyLnNlbmRlciA9PT0gdGhpcy50eG4uc2VuZGVyKQoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwNwoJLy8gb3V0SWQgPSBzd2FwWGZlci54ZmVyQXNzZXQgPT09IGFBc3NldCA/IGFBc3NldCA6IGJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJPT0KCWJ6IHRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgLTIgLy8gYUFzc2V0OiBhc3NldAoJYiB0ZXJuYXJ5MV9lbmQKCnRlcm5hcnkxX2ZhbHNlOgoJZnJhbWVfZGlnIC0zIC8vIGJBc3NldDogYXNzZXQKCnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgLTQgLy8gb3V0SWQ6IGFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIwOQoJLy8gaW5JZCA9IHN3YXBYZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIHN3YXBYZmVyOiBheGZlcgoJZ3R4bnMgWGZlckFzc2V0CglmcmFtZV9idXJ5IC01IC8vIGluSWQ6IGFzc2V0CgoJLy8gZXhhbXBsZXMvYW1tL2FtbS5hbGdvLnRzOjIxMQoJLy8gdG9Td2FwID0gdGhpcy50b2tlbnNUb1N3YXAoCglieXRlIDB4Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNCAvLyBvdXRJZDogYXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWZyYW1lX2RpZyAtNSAvLyBpbklkOiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMSAvLyBzd2FwWGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CgktCglmcmFtZV9kaWcgLTEgLy8gc3dhcFhmZXI6IGF4ZmVyCglndHhucyBBc3NldEFtb3VudAoJY2FsbHN1YiB0b2tlbnNUb1N3YXAKCWZyYW1lX2J1cnkgLTYgLy8gdG9Td2FwOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hbW0vYW1tLmFsZ28udHM6MjE3CgkvLyBhc3NlcnQodG9Td2FwID4gMCkKCWZyYW1lX2RpZyAtNiAvLyB0b1N3YXA6IHVpbnQ2NAoJaW50IDAKCT4KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyMTkKCS8vIHRoaXMuZG9BeGZlcih0aGlzLnR4bi5zZW5kZXIsIG91dElkLCB0b1N3YXApCglmcmFtZV9kaWcgLTYgLy8gdG9Td2FwOiB1aW50NjQKCWZyYW1lX2RpZyAtNCAvLyBvdXRJZDogYXNzZXQKCXR4biBTZW5kZXIKCWNhbGxzdWIgZG9BeGZlcgoKCS8vIGV4YW1wbGVzL2FtbS9hbW0uYWxnby50czoyMjEKCS8vIHRoaXMucmF0aW8ucHV0KHRoaXMuY29tcHV0ZVJhdGlvKCkpCglieXRlICJyIgoJY2FsbHN1YiBjb21wdXRlUmF0aW8KCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgInNldF9nb3Zlcm5vcihhY2NvdW50KXZvaWQiCgltZXRob2QgImJvb3RzdHJhcChwYXksYXNzZXQsYXNzZXQpdWludDY0IgoJbWV0aG9kICJtaW50KGF4ZmVyLGF4ZmVyLGFzc2V0LGFzc2V0LGFzc2V0KXZvaWQiCgltZXRob2QgImJ1cm4oYXhmZXIsYXNzZXQsYXNzZXQsYXNzZXQpdm9pZCIKCW1ldGhvZCAic3dhcChheGZlcixhc3NldCxhc3NldCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX3NldF9nb3Zlcm5vciBhYmlfcm91dGVfYm9vdHN0cmFwIGFiaV9yb3V0ZV9taW50IGFiaV9yb3V0ZV9idXJuIGFiaV9yb3V0ZV9zd2Fw", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "ConstantProductAMM", + "desc": "", + "methods": [ + { + "name": "set_governor", + "args": [ + { + "name": "governor", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "bootstrap", + "args": [ + { + "name": "seed", + "type": "pay", + "desc": "" + }, + { + "name": "aAsset", + "type": "asset", + "desc": "" + }, + { + "name": "bAsset", + "type": "asset", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "mint", + "args": [ + { + "name": "aXfer", + "type": "axfer", + "desc": "" + }, + { + "name": "bXfer", + "type": "axfer", + "desc": "" + }, + { + "name": "poolAsset", + "type": "asset", + "desc": "" + }, + { + "name": "aAsset", + "type": "asset", + "desc": "" + }, + { + "name": "bAsset", + "type": "asset", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "burn", + "args": [ + { + "name": "poolXfer", + "type": "axfer", + "desc": "" + }, + { + "name": "poolAsset", + "type": "asset", + "desc": "" + }, + { + "name": "aAsset", + "type": "asset", + "desc": "" + }, + { + "name": "bAsset", + "type": "asset", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "swap", + "args": [ + { + "name": "swapXfer", + "type": "axfer", + "desc": "" + }, + { + "name": "aAsset", + "type": "asset", + "desc": "" + }, + { + "name": "bAsset", + "type": "asset", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/arc12/Master.json b/examples/arc12/Master.json index f7b6c7a85..de6a990db 100644 --- a/examples/arc12/Master.json +++ b/examples/arc12/Master.json @@ -1 +1,177 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEzNgoJLy8gYXNzZXJ0KHRoaXMudHhuLmFwcGxpY2F0aW9uSUQgPT09IEFwcGxpY2F0aW9uLnplcm9JbmRleCkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY3JlYXRlVmF1bHQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBjcmVhdGVWYXVsdAoJaW50IDEKCXJldHVybgoKY3JlYXRlVmF1bHQ6Cglwcm90byA0IDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE0MAoJLy8gYXNzZXJ0KCF0aGlzLnZhdWx0TWFwLmV4aXN0cyhyZWNlaXZlcikpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWJveF9nZXQKCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNDEKCS8vIGFzc2VydChtYnJQYXltZW50LnJlY2VpdmVyID09PSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE0MgoJLy8gYXNzZXJ0KG1iclBheW1lbnQuc2VuZGVyID09PSB0aGlzLnR4bi5zZW5kZXIpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE0MwoJLy8gYXNzZXJ0KG1iclBheW1lbnQuY2xvc2VSZW1haW5kZXJUbyA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzcykKCWZyYW1lX2RpZyAtMiAvLyBtYnJQYXltZW50OiBwYXkKCWd0eG5zIENsb3NlUmVtYWluZGVyVG8KCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTQ1CgkvLyBwcmVDcmVhdGVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9idXJ5IC0zIC8vIHByZUNyZWF0ZU1CUjogdWludDY0CgoJLy8gQ3JlYXRlIHRoZSB2YXVsdAoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNDgKCS8vIHNlbmRNZXRob2RDYWxsPFtBY2NvdW50LCBBY2NvdW50XSwgdm9pZD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiY3JlYXRlKGFjY291bnQsYWNjb3VudCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE1MAoJLy8gb25Db21wbGV0aW9uOiAnTm9PcCcKCWludCBOb09wCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTUxCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTUyCgkvLyBtZXRob2RBcmdzOiBbcmVjZWl2ZXIsIHRoaXMudHhuLnNlbmRlcl0KCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogYWNjb3VudAoJaXR4bl9maWVsZCBBY2NvdW50cwoJaW50IDEKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFjY291bnRzCglpbnQgMgoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE1MwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IHRoaXMuYXBwLmNsZWFyU3RhdGVQcm9ncmFtCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDbGVhclN0YXRlUHJvZ3JhbQoJYXNzZXJ0CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNTQKCS8vIGFwcHJvdmFsUHJvZ3JhbTogVmF1bHQKCWJ5dGUgYjY0IENDQUVBQUVFQlNZRUFBZGpjbVZoZEc5eUNISmxZMlZwZG1WeUJtMWhjM1JsY2tJQ1Bvb0NBSXYvS1dRU1JMRWpzaENMLzdJSE1ncHpBVVN5Q0NLeUFURUFzZ216TVJZakNJeitpLzQ0R0N0a0VrU0wvamthQUlBRW0wcGtwUkpFaS80NU1nRTJNZ0FTUklreEdTSVNNUmdpRWhCRU5ob0NGOEFjTmhvQkY4QWNpQUFDSTBPS0FnQXBpLzVuS292L1p5c3lEV2VKTVJraUVqRVlJaE1RUkNoSk5ob0VGOEFjTmhvREY4QXdOaG9DRjhBY05ob0JGOEFjaUFBQ0kwT0tCZ0F4QUNwa0VrU0wvb0FneC96TnNsancxQmljSy9pMjFvN21sMUNHUXJDdEFCOHgvTGtZdzFTNmhab1NSRElLY3dGRWpQdXhKTElRaS8reUZJdjlzaEVpc2hLTC83SVZJcklCczR2OUZyeUwreklLY3dGRUNZejZzU095RUl2K3NnZUwrakVCQ2JJSUlySUJzN0Vqc2hBeEFMSUhNUUd5Q0NLeUFiTXlDbk1KUkNJU1FRQUdLSXY4aVA3WWlURVpJaEl4R0NJVEVFUW9NUllqQ1RZYUFSZkFNSWdBQWlORGlnTUFpLzhXdmt4SUZFU0wvamdBTVFBU1JJditPQWN5Q2hKRU1ncHpBVVNNL1l2L0ZqRUF2N0Vrc2hBeUNySVVJcklTSXJJQmkvK3lFYk9ML2pnSU1ncHpBVVNML1FrU1JJa3hHU0lTTVJnaUV4QkVLRFlhQXhmQUhEWWFBaGZBSERZYUFSZkFNSWdBQWlORGlnUUFpLzhXdmt4SVJJdjlpLzhXdmtRU1JERUFLbVFTUkNsa2kvNFNSRElLY3dGRWpQeUwveGE4c1NTeUVERUFzaFFpc2dFeUNvdi9jQUJFc2hLTC83SVJNUUN5RmJPeEk3SVFpLzJ5QjR2OE1ncHpBVVFKc2dnaXNnR3pNZ3B6Q1VRaUVrRUFCaWlML29qOTVJa3hHU1VTTVJnaUV4QkVpQUFDSTBPS0FBQXlDbk1BVEVnVVJERUFNZ2tTUklreEcwQUFDVEVaSlJJampnSC8wWUFFd1RGY1dZQUVqMHhXUFlBRWNaZWJRSUFFS1J4UllqWWFBSTRFL2RYK0FQNjQveHc9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTU1CgkvLyBnbG9iYWxOdW1CeXRlU2xpY2U6IDIKCWludCAyCglpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTU2CgkvLyBnbG9iYWxOdW1VaW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTU5CgkvLyB2YXVsdCA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRAoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJZnJhbWVfYnVyeSAtNCAvLyB2YXVsdDogYXBwbGljYXRpb24KCgkvLyBGdW5kIHRoZSB2YXVsdCB3aXRoIGFjY291bnQgTUJSCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE2MgoJLy8gc2VuZFBheW1lbnQoewoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTYzCgkvLyByZWNlaXZlcjogdmF1bHQuYWRkcmVzcwoJZnJhbWVfZGlnIC00IC8vIHZhdWx0OiBhcHBsaWNhdGlvbgoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNjQKCS8vIGFtb3VudDogZ2xvYmFscy5taW5CYWxhbmNlCglnbG9iYWwgTWluQmFsYW5jZQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE2NQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNjgKCS8vIHRoaXMudmF1bHRNYXAucHV0KHJlY2VpdmVyLCB2YXVsdCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogYWNjb3VudAoJZnJhbWVfZGlnIC00IC8vIHZhdWx0OiBhcHBsaWNhdGlvbgoJaXRvYgoJYm94X3B1dAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTcxCgkvLyBhc3NlcnQobWJyUGF5bWVudC5hbW91bnQgPT09IChnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZUNyZWF0ZU1CUikgKyBnbG9iYWxzLm1pbkJhbGFuY2UpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBBbW91bnQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIHByZUNyZWF0ZU1CUjogdWludDY0CgktCglnbG9iYWwgTWluQmFsYW5jZQoJKwoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTczCgkvLyByZXR1cm4gdmF1bHQ7CglmcmFtZV9kaWcgLTQgLy8gdmF1bHQ6IGFwcGxpY2F0aW9uCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV92ZXJpZnlBeGZlcjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQXBwbGljYXRpb25zCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHZlcmlmeUF4ZmVyCglpbnQgMQoJcmV0dXJuCgp2ZXJpZnlBeGZlcjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTc3CgkvLyBhc3NlcnQodGhpcy52YXVsdE1hcC5leGlzdHMocmVjZWl2ZXIpKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50Cglib3hfZ2V0Cglzd2FwCglwb3AKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTc5CgkvLyBhc3NlcnQodGhpcy52YXVsdE1hcC5nZXQocmVjZWl2ZXIpID09PSB2YXVsdCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogYWNjb3VudAoJYm94X2dldAoJYXNzZXJ0CglidG9pCglmcmFtZV9kaWcgLTMgLy8gdmF1bHQ6IGFwcGxpY2F0aW9uCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxODAKCS8vIGFzc2VydCh2YXVsdEF4ZmVyLmFzc2V0UmVjZWl2ZXIgPT09IHZhdWx0LmFkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gdmF1bHRBeGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMyAvLyB2YXVsdDogYXBwbGljYXRpb24KCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTgxCgkvLyBhc3NlcnQodmF1bHRBeGZlci5hc3NldENsb3NlVG8gPT09IGdsb2JhbHMuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gdmF1bHRBeGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0Q2xvc2VUbwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9oYXNWYXVsdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgaGFzVmF1bHQKCWludCAxCglyZXR1cm4KCmhhc1ZhdWx0OgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxODUKCS8vIHJldHVybiB0aGlzLnZhdWx0TWFwLmV4aXN0cyhyZWNlaXZlcik7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWJveF9nZXQKCXN3YXAKCXBvcAoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZ2V0VmF1bHRJZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgZ2V0VmF1bHRJZAoJaW50IDEKCXJldHVybgoKZ2V0VmF1bHRJZDoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTg5CgkvLyByZXR1cm4gdGhpcy52YXVsdE1hcC5nZXQocmVjZWl2ZXIpOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50Cglib3hfZ2V0Cglhc3NlcnQKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2dldFZhdWx0QWRkcjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgZ2V0VmF1bHRBZGRyCglpbnQgMQoJcmV0dXJuCgpnZXRWYXVsdEFkZHI6Cglwcm90byAxIDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHRoaXMudmF1bHRNYXAuZ2V0KHJlY2VpdmVyKS5hZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50Cglib3hfZ2V0Cglhc3NlcnQKCWJ0b2kKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZGVsZXRlVmF1bHQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFwcGxpY2F0aW9ucwoJY2FsbHN1YiBkZWxldGVWYXVsdAoJaW50IDEKCXJldHVybgoKZGVsZXRlVmF1bHQ6Cglwcm90byA0IDAKCgkvLyBUaGUgZmVlIG5lZWRzIHRvIGJlIDAgYmVjYXVzZSBhbGwgb2YgdGhlIGZlZXMgbmVlZCB0byBwYWlkIGJ5IHRoZSB2YXVsdCBjYWxsCgkvLyBUaGlzIGVuc3VyZXMgdGhlIHNlbmRlciB3aWxsIGJlIHJlZnVuZGVkIGZvciBhbGwgZmVlcyBpZiB0aGV5IGFyZSByZWplY3RpbmcgdGhlIGxhc3QgQVNBCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE5OQoJLy8gYXNzZXJ0KHRoaXMudHhuLmZlZSA9PT0gMCkKCXR4biBGZWUKCWludCAwCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMDAKCS8vIGFzc2VydCh2YXVsdCA9PT0gdGhpcy52YXVsdE1hcC5nZXQodGhpcy50eG4uc2VuZGVyKSkKCWZyYW1lX2RpZyAtMSAvLyB2YXVsdDogYXBwbGljYXRpb24KCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJYnRvaQoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjAyCgkvLyB2YXVsdENyZWF0b3IgPSB2YXVsdC5nbG9iYWwoJ2NyZWF0b3InKSBhcyBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gdmF1bHQ6IGFwcGxpY2F0aW9uCglieXRlICJjcmVhdG9yIgoJYXBwX2dsb2JhbF9nZXRfZXgKCWFzc2VydAoJZnJhbWVfYnVyeSAtMyAvLyB2YXVsdENyZWF0b3I6IGFkZHJlc3MKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIwMwoJLy8gYXNzZXJ0KHZhdWx0Q3JlYXRvciA9PT0gY3JlYXRvcikKCWZyYW1lX2RpZyAtMyAvLyB2YXVsdENyZWF0b3I6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBjcmVhdG9yOiBhY2NvdW50Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMDUKCS8vIHByZURlbGV0ZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTQgLy8gcHJlRGVsZXRlTUJSOiB1aW50NjQKCgkvLyBDYWxsIGRlbGV0ZSBvbiB0aGUgdmF1bHQKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjA4CgkvLyBzZW5kQXBwQ2FsbCh7CglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjA5CgkvLyBhcHBsaWNhdGlvbklEOiB2YXVsdAoJZnJhbWVfZGlnIC0xIC8vIHZhdWx0OiBhcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMTAKCS8vIG9uQ29tcGxldGlvbjogJ0RlbGV0ZUFwcGxpY2F0aW9uJwoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjExCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIxNAoJLy8gdGhpcy52YXVsdE1hcC5kZWxldGUodGhpcy50eG4uc2VuZGVyKQoJdHhuIFNlbmRlcgoJYm94X2RlbAoKCS8vIFNlbmQgdGhlIE1CUiBiYWNrIHRvIHRoZSB2YXVsdCBjcmVhdG9yCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIxNwoJLy8gc2VuZFBheW1lbnQoewoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjE4CgkvLyByZWNlaXZlcjogdmF1bHRDcmVhdG9yCglmcmFtZV9kaWcgLTMgLy8gdmF1bHRDcmVhdG9yOiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMTkKCS8vIGFtb3VudDogcHJlRGVsZXRlTUJSIC0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAtNCAvLyBwcmVEZWxldGVNQlI6IHVpbnQ2NAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjIwCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CglibnogYmFyZV9yb3V0ZV9jcmVhdGUKCnJvdXRlX2FiaToKCW1ldGhvZCAiY3JlYXRlVmF1bHQoYWNjb3VudCxwYXkpdWludDY0IgoJbWV0aG9kICJ2ZXJpZnlBeGZlcihhY2NvdW50LGF4ZmVyLGFwcGxpY2F0aW9uKXZvaWQiCgltZXRob2QgImhhc1ZhdWx0KGFjY291bnQpdWludDY0IgoJbWV0aG9kICJnZXRWYXVsdElkKGFjY291bnQpdWludDY0IgoJbWV0aG9kICJnZXRWYXVsdEFkZHIoYWNjb3VudClhZGRyZXNzIgoJbWV0aG9kICJkZWxldGVWYXVsdChhcHBsaWNhdGlvbixhY2NvdW50KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfY3JlYXRlVmF1bHQgYWJpX3JvdXRlX3ZlcmlmeUF4ZmVyIGFiaV9yb3V0ZV9oYXNWYXVsdCBhYmlfcm91dGVfZ2V0VmF1bHRJZCBhYmlfcm91dGVfZ2V0VmF1bHRBZGRyIGFiaV9yb3V0ZV9kZWxldGVWYXVsdA==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"Master","desc":"","methods":[{"name":"createVault","args":[{"name":"receiver","type":"account","desc":""},{"name":"mbrPayment","type":"pay","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"verifyAxfer","args":[{"name":"receiver","type":"account","desc":""},{"name":"vaultAxfer","type":"axfer","desc":""},{"name":"vault","type":"application","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"hasVault","args":[{"name":"receiver","type":"account","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"getVaultId","args":[{"name":"receiver","type":"account","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"getVaultAddr","args":[{"name":"receiver","type":"account","desc":""}],"desc":"","returns":{"type":"address","desc":""}},{"name":"deleteVault","args":[{"name":"vault","type":"application","desc":""},{"name":"creator","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "createVault(account,pay)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "verifyAxfer(account,axfer,application)void": { + "call_config": { + "no_op": "CALL" + } + }, + "hasVault(account)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "getVaultId(account)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "getVaultAddr(account)address": { + "call_config": { + "no_op": "CALL" + } + }, + "deleteVault(application,account)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEzNgoJLy8gYXNzZXJ0KHRoaXMudHhuLmFwcGxpY2F0aW9uSUQgPT09IEFwcGxpY2F0aW9uLnplcm9JbmRleCkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY3JlYXRlVmF1bHQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBjcmVhdGVWYXVsdAoJaW50IDEKCXJldHVybgoKY3JlYXRlVmF1bHQ6Cglwcm90byA0IDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE0MAoJLy8gYXNzZXJ0KCF0aGlzLnZhdWx0TWFwLmV4aXN0cyhyZWNlaXZlcikpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWJveF9nZXQKCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNDEKCS8vIGFzc2VydChtYnJQYXltZW50LnJlY2VpdmVyID09PSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE0MgoJLy8gYXNzZXJ0KG1iclBheW1lbnQuc2VuZGVyID09PSB0aGlzLnR4bi5zZW5kZXIpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBTZW5kZXIKCXR4biBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE0MwoJLy8gYXNzZXJ0KG1iclBheW1lbnQuY2xvc2VSZW1haW5kZXJUbyA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzcykKCWZyYW1lX2RpZyAtMiAvLyBtYnJQYXltZW50OiBwYXkKCWd0eG5zIENsb3NlUmVtYWluZGVyVG8KCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTQ1CgkvLyBwcmVDcmVhdGVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9idXJ5IC0zIC8vIHByZUNyZWF0ZU1CUjogdWludDY0CgoJLy8gQ3JlYXRlIHRoZSB2YXVsdAoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNDgKCS8vIHNlbmRNZXRob2RDYWxsPFtBY2NvdW50LCBBY2NvdW50XSwgdm9pZD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiY3JlYXRlKGFjY291bnQsYWNjb3VudCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE1MAoJLy8gb25Db21wbGV0aW9uOiAnTm9PcCcKCWludCBOb09wCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTUxCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTUyCgkvLyBtZXRob2RBcmdzOiBbcmVjZWl2ZXIsIHRoaXMudHhuLnNlbmRlcl0KCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogYWNjb3VudAoJaXR4bl9maWVsZCBBY2NvdW50cwoJaW50IDEKCWl0b2IKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFjY291bnRzCglpbnQgMgoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE1MwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IHRoaXMuYXBwLmNsZWFyU3RhdGVQcm9ncmFtCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDbGVhclN0YXRlUHJvZ3JhbQoJYXNzZXJ0CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNTQKCS8vIGFwcHJvdmFsUHJvZ3JhbTogVmF1bHQKCWJ5dGUgYjY0IENDQUVBQUVFQlNZRUFBZGpjbVZoZEc5eUNISmxZMlZwZG1WeUJtMWhjM1JsY2tJQ1Bvb0NBSXYvS1dRU1JMRWpzaENMLzdJSE1ncHpBVVN5Q0NLeUFURUFzZ216TVJZakNJeitpLzQ0R0N0a0VrU0wvamthQUlBRW0wcGtwUkpFaS80NU1nRTJNZ0FTUklreEdTSVNNUmdpRWhCRU5ob0NGOEFjTmhvQkY4QWNpQUFDSTBPS0FnQXBpLzVuS292L1p5c3lEV2VKTVJraUVqRVlJaE1RUkNoSk5ob0VGOEFjTmhvREY4QXdOaG9DRjhBY05ob0JGOEFjaUFBQ0kwT0tCZ0F4QUNwa0VrU0wvb0FneC96TnNsancxQmljSy9pMjFvN21sMUNHUXJDdEFCOHgvTGtZdzFTNmhab1NSRElLY3dGRWpQdXhKTElRaS8reUZJdjlzaEVpc2hLTC83SVZJcklCczR2OUZyeUwreklLY3dGRUNZejZzU095RUl2K3NnZUwrakVCQ2JJSUlySUJzN0Vqc2hBeEFMSUhNUUd5Q0NLeUFiTXlDbk1KUkNJU1FRQUdLSXY4aVA3WWlURVpJaEl4R0NJVEVFUW9NUllqQ1RZYUFSZkFNSWdBQWlORGlnTUFpLzhXdmt4SUZFU0wvamdBTVFBU1JJditPQWN5Q2hKRU1ncHpBVVNNL1l2L0ZqRUF2N0Vrc2hBeUNySVVJcklTSXJJQmkvK3lFYk9ML2pnSU1ncHpBVVNML1FrU1JJa3hHU0lTTVJnaUV4QkVLRFlhQXhmQUhEWWFBaGZBSERZYUFSZkFNSWdBQWlORGlnUUFpLzhXdmt4SVJJdjlpLzhXdmtRU1JERUFLbVFTUkNsa2kvNFNSRElLY3dGRWpQeUwveGE4c1NTeUVERUFzaFFpc2dFeUNvdi9jQUJFc2hLTC83SVJNUUN5RmJPeEk3SVFpLzJ5QjR2OE1ncHpBVVFKc2dnaXNnR3pNZ3B6Q1VRaUVrRUFCaWlML29qOTVJa3hHU1VTTVJnaUV4QkVpQUFDSTBPS0FBQXlDbk1BVEVnVVJERUFNZ2tTUklreEcwQUFDVEVaSlJJampnSC8wWUFFd1RGY1dZQUVqMHhXUFlBRWNaZWJRSUFFS1J4UllqWWFBSTRFL2RYK0FQNjQveHc9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTU1CgkvLyBnbG9iYWxOdW1CeXRlU2xpY2U6IDIKCWludCAyCglpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTU2CgkvLyBnbG9iYWxOdW1VaW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CglpdHhuX3N1Ym1pdAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTU5CgkvLyB2YXVsdCA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRAoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJZnJhbWVfYnVyeSAtNCAvLyB2YXVsdDogYXBwbGljYXRpb24KCgkvLyBGdW5kIHRoZSB2YXVsdCB3aXRoIGFjY291bnQgTUJSCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE2MgoJLy8gc2VuZFBheW1lbnQoewoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTYzCgkvLyByZWNlaXZlcjogdmF1bHQuYWRkcmVzcwoJZnJhbWVfZGlnIC00IC8vIHZhdWx0OiBhcHBsaWNhdGlvbgoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNjQKCS8vIGFtb3VudDogZ2xvYmFscy5taW5CYWxhbmNlCglnbG9iYWwgTWluQmFsYW5jZQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE2NQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNjgKCS8vIHRoaXMudmF1bHRNYXAucHV0KHJlY2VpdmVyLCB2YXVsdCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogYWNjb3VudAoJZnJhbWVfZGlnIC00IC8vIHZhdWx0OiBhcHBsaWNhdGlvbgoJaXRvYgoJYm94X3B1dAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTcxCgkvLyBhc3NlcnQobWJyUGF5bWVudC5hbW91bnQgPT09IChnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZUNyZWF0ZU1CUikgKyBnbG9iYWxzLm1pbkJhbGFuY2UpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBBbW91bnQKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIHByZUNyZWF0ZU1CUjogdWludDY0CgktCglnbG9iYWwgTWluQmFsYW5jZQoJKwoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTczCgkvLyByZXR1cm4gdmF1bHQ7CglmcmFtZV9kaWcgLTQgLy8gdmF1bHQ6IGFwcGxpY2F0aW9uCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV92ZXJpZnlBeGZlcjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQXBwbGljYXRpb25zCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHZlcmlmeUF4ZmVyCglpbnQgMQoJcmV0dXJuCgp2ZXJpZnlBeGZlcjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTc3CgkvLyBhc3NlcnQodGhpcy52YXVsdE1hcC5leGlzdHMocmVjZWl2ZXIpKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50Cglib3hfZ2V0Cglzd2FwCglwb3AKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTc5CgkvLyBhc3NlcnQodGhpcy52YXVsdE1hcC5nZXQocmVjZWl2ZXIpID09PSB2YXVsdCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogYWNjb3VudAoJYm94X2dldAoJYXNzZXJ0CglidG9pCglmcmFtZV9kaWcgLTMgLy8gdmF1bHQ6IGFwcGxpY2F0aW9uCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxODAKCS8vIGFzc2VydCh2YXVsdEF4ZmVyLmFzc2V0UmVjZWl2ZXIgPT09IHZhdWx0LmFkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gdmF1bHRBeGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMyAvLyB2YXVsdDogYXBwbGljYXRpb24KCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTgxCgkvLyBhc3NlcnQodmF1bHRBeGZlci5hc3NldENsb3NlVG8gPT09IGdsb2JhbHMuemVyb0FkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gdmF1bHRBeGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0Q2xvc2VUbwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9oYXNWYXVsdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgaGFzVmF1bHQKCWludCAxCglyZXR1cm4KCmhhc1ZhdWx0OgoJcHJvdG8gMSAwCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxODUKCS8vIHJldHVybiB0aGlzLnZhdWx0TWFwLmV4aXN0cyhyZWNlaXZlcik7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWJveF9nZXQKCXN3YXAKCXBvcAoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZ2V0VmF1bHRJZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgZ2V0VmF1bHRJZAoJaW50IDEKCXJldHVybgoKZ2V0VmF1bHRJZDoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTg5CgkvLyByZXR1cm4gdGhpcy52YXVsdE1hcC5nZXQocmVjZWl2ZXIpOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50Cglib3hfZ2V0Cglhc3NlcnQKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2dldFZhdWx0QWRkcjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgZ2V0VmF1bHRBZGRyCglpbnQgMQoJcmV0dXJuCgpnZXRWYXVsdEFkZHI6Cglwcm90byAxIDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHRoaXMudmF1bHRNYXAuZ2V0KHJlY2VpdmVyKS5hZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50Cglib3hfZ2V0Cglhc3NlcnQKCWJ0b2kKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZGVsZXRlVmF1bHQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFwcGxpY2F0aW9ucwoJY2FsbHN1YiBkZWxldGVWYXVsdAoJaW50IDEKCXJldHVybgoKZGVsZXRlVmF1bHQ6Cglwcm90byA0IDAKCgkvLyBUaGUgZmVlIG5lZWRzIHRvIGJlIDAgYmVjYXVzZSBhbGwgb2YgdGhlIGZlZXMgbmVlZCB0byBwYWlkIGJ5IHRoZSB2YXVsdCBjYWxsCgkvLyBUaGlzIGVuc3VyZXMgdGhlIHNlbmRlciB3aWxsIGJlIHJlZnVuZGVkIGZvciBhbGwgZmVlcyBpZiB0aGV5IGFyZSByZWplY3RpbmcgdGhlIGxhc3QgQVNBCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE5OQoJLy8gYXNzZXJ0KHRoaXMudHhuLmZlZSA9PT0gMCkKCXR4biBGZWUKCWludCAwCgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMDAKCS8vIGFzc2VydCh2YXVsdCA9PT0gdGhpcy52YXVsdE1hcC5nZXQodGhpcy50eG4uc2VuZGVyKSkKCWZyYW1lX2RpZyAtMSAvLyB2YXVsdDogYXBwbGljYXRpb24KCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJYnRvaQoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjAyCgkvLyB2YXVsdENyZWF0b3IgPSB2YXVsdC5nbG9iYWwoJ2NyZWF0b3InKSBhcyBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gdmF1bHQ6IGFwcGxpY2F0aW9uCglieXRlICJjcmVhdG9yIgoJYXBwX2dsb2JhbF9nZXRfZXgKCWFzc2VydAoJZnJhbWVfYnVyeSAtMyAvLyB2YXVsdENyZWF0b3I6IGFkZHJlc3MKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIwMwoJLy8gYXNzZXJ0KHZhdWx0Q3JlYXRvciA9PT0gY3JlYXRvcikKCWZyYW1lX2RpZyAtMyAvLyB2YXVsdENyZWF0b3I6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBjcmVhdG9yOiBhY2NvdW50Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMDUKCS8vIHByZURlbGV0ZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTQgLy8gcHJlRGVsZXRlTUJSOiB1aW50NjQKCgkvLyBDYWxsIGRlbGV0ZSBvbiB0aGUgdmF1bHQKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjA4CgkvLyBzZW5kQXBwQ2FsbCh7CglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjA5CgkvLyBhcHBsaWNhdGlvbklEOiB2YXVsdAoJZnJhbWVfZGlnIC0xIC8vIHZhdWx0OiBhcHBsaWNhdGlvbgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMTAKCS8vIG9uQ29tcGxldGlvbjogJ0RlbGV0ZUFwcGxpY2F0aW9uJwoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjExCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIxNAoJLy8gdGhpcy52YXVsdE1hcC5kZWxldGUodGhpcy50eG4uc2VuZGVyKQoJdHhuIFNlbmRlcgoJYm94X2RlbAoKCS8vIFNlbmQgdGhlIE1CUiBiYWNrIHRvIHRoZSB2YXVsdCBjcmVhdG9yCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIxNwoJLy8gc2VuZFBheW1lbnQoewoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjE4CgkvLyByZWNlaXZlcjogdmF1bHRDcmVhdG9yCglmcmFtZV9kaWcgLTMgLy8gdmF1bHRDcmVhdG9yOiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoyMTkKCS8vIGFtb3VudDogcHJlRGVsZXRlTUJSIC0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAtNCAvLyBwcmVEZWxldGVNQlI6IHVpbnQ2NAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjIwCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CglibnogYmFyZV9yb3V0ZV9jcmVhdGUKCnJvdXRlX2FiaToKCW1ldGhvZCAiY3JlYXRlVmF1bHQoYWNjb3VudCxwYXkpdWludDY0IgoJbWV0aG9kICJ2ZXJpZnlBeGZlcihhY2NvdW50LGF4ZmVyLGFwcGxpY2F0aW9uKXZvaWQiCgltZXRob2QgImhhc1ZhdWx0KGFjY291bnQpdWludDY0IgoJbWV0aG9kICJnZXRWYXVsdElkKGFjY291bnQpdWludDY0IgoJbWV0aG9kICJnZXRWYXVsdEFkZHIoYWNjb3VudClhZGRyZXNzIgoJbWV0aG9kICJkZWxldGVWYXVsdChhcHBsaWNhdGlvbixhY2NvdW50KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfY3JlYXRlVmF1bHQgYWJpX3JvdXRlX3ZlcmlmeUF4ZmVyIGFiaV9yb3V0ZV9oYXNWYXVsdCBhYmlfcm91dGVfZ2V0VmF1bHRJZCBhYmlfcm91dGVfZ2V0VmF1bHRBZGRyIGFiaV9yb3V0ZV9kZWxldGVWYXVsdA==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "Master", + "desc": "", + "methods": [ + { + "name": "createVault", + "args": [ + { + "name": "receiver", + "type": "account", + "desc": "" + }, + { + "name": "mbrPayment", + "type": "pay", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "verifyAxfer", + "args": [ + { + "name": "receiver", + "type": "account", + "desc": "" + }, + { + "name": "vaultAxfer", + "type": "axfer", + "desc": "" + }, + { + "name": "vault", + "type": "application", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "hasVault", + "args": [ + { + "name": "receiver", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "getVaultId", + "args": [ + { + "name": "receiver", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "getVaultAddr", + "args": [ + { + "name": "receiver", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "address", + "desc": "" + } + }, + { + "name": "deleteVault", + "args": [ + { + "name": "vault", + "type": "application", + "desc": "" + }, + { + "name": "creator", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/arc12/Vault.json b/examples/arc12/Vault.json index ed7e00302..8a8a81dc3 100644 --- a/examples/arc12/Vault.json +++ b/examples/arc12/Vault.json @@ -1 +1,165 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{"creator":{"type":"bytes","key":"creator"},"master":{"type":"uint64","key":"master"},"receiver":{"type":"bytes","key":"receiver"}},"reserved":{}}},"state":{"global":{"num_byte_slices":2,"num_uints":1},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKY2xvc2VBY2N0OgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNAoJLy8gYXNzZXJ0KHZhdWx0Q3JlYXRvciA9PT0gdGhpcy5jcmVhdG9yLmdldCgpKQoJZnJhbWVfZGlnIC0xIC8vIHZhdWx0Q3JlYXRvcjogYWNjb3VudAoJYnl0ZSAiY3JlYXRvciIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gU2VuZCB0aGUgTUJSIHRvIHRoZSB2YXVsdCBjcmVhdG9yCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE3CgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxOAoJLy8gcmVjZWl2ZXI6IHZhdWx0Q3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIHZhdWx0Q3JlYXRvcjogYWNjb3VudAoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTkKCS8vIGFtb3VudDogZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIwCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjIKCS8vIGNsb3NlUmVtYWluZGVyVG86IHRoaXMudHhuLnNlbmRlcgoJLy8gQW55IHJlbWFpbmluZyBiYWxhbmNlIGlzIHNlbnQgdGhlIHJlY2VpdmVyIGZvciB0aGUgdmF1bHQKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI1CgkvLyBkZWxldGVWYXVsdFR4biA9IHRoaXMudHhuR3JvdXBbdGhpcy50eG4uZ3JvdXBJbmRleCArIDFdCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgLTIgLy8gZGVsZXRlVmF1bHRUeG46IHR4bgoKCS8vIEVuc3VyZSBNYXN0ZXIuZGVsZXRlVmF1bHQgaXMgYmVpbmcgY2FsbGVkIGZvciB0aGlzIHZhdWx0CgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI3CgkvLyBhc3NlcnQoZGVsZXRlVmF1bHRUeG4uYXBwbGljYXRpb25JRCA9PT0gdGhpcy5tYXN0ZXIuZ2V0KCkpCglmcmFtZV9kaWcgLTIgLy8gZGVsZXRlVmF1bHRUeG46IHR4bgoJZ3R4bnMgQXBwbGljYXRpb25JRAoJYnl0ZSAibWFzdGVyIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI4CgkvLyBhc3NlcnQoZGVsZXRlVmF1bHRUeG4uYXBwbGljYXRpb25BcmdzWzBdID09PSBtZXRob2QoJ2RlbGV0ZVZhdWx0KGFwcGxpY2F0aW9uLGFjY291bnQpdm9pZCcpKQoJZnJhbWVfZGlnIC0yIC8vIGRlbGV0ZVZhdWx0VHhuOiB0eG4KCWd0eG5zIEFwcGxpY2F0aW9uQXJncyAwCgltZXRob2QgImRlbGV0ZVZhdWx0KGFwcGxpY2F0aW9uLGFjY291bnQpdm9pZCIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI5CgkvLyBhc3NlcnQoZGVsZXRlVmF1bHRUeG4uYXBwbGljYXRpb25zWzFdID09PSB0aGlzLmFwcCkKCWZyYW1lX2RpZyAtMiAvLyBkZWxldGVWYXVsdFR4bjogdHhuCglndHhucyBBcHBsaWNhdGlvbnMgMQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY3JlYXRlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjM0CgkvLyB0aGlzLmNyZWF0b3IucHV0KHNlbmRlcikKCWJ5dGUgImNyZWF0b3IiCglmcmFtZV9kaWcgLTIgLy8gc2VuZGVyOiBhY2NvdW50CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MzUKCS8vIHRoaXMucmVjZWl2ZXIucHV0KHJlY2VpdmVyKQoJYnl0ZSAicmVjZWl2ZXIiCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czozNgoJLy8gdGhpcy5tYXN0ZXIucHV0KGdsb2JhbHMuY2FsbGVyQXBwbGljYXRpb25JRCkKCWJ5dGUgIm1hc3RlciIKCWdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgphYmlfcm91dGVfcmVqZWN0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiByZWplY3QKCWludCAxCglyZXR1cm4KCnJlamVjdDoKCXByb3RvIDYgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NDAKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMucmVjZWl2ZXIuZ2V0KCkpCgl0eG4gU2VuZGVyCglieXRlICJyZWNlaXZlciIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo0MQoJLy8gYXNzZXJ0KGZlZVNpbmsgPT09IGFkZHIoJ1k3Nk0zTVNZNkRLQlJIQkw3QzNOTkRYR1M1SUlNUVZRVlVBQjZNUDRYRU1NR1ZGMlFXTlBMMjI2Q0EnKSkKCWZyYW1lX2RpZyAtMiAvLyBmZWVTaW5rOiBhY2NvdW50CglhZGRyIFk3Nk0zTVNZNkRLQlJIQkw3QzNOTkRYR1M1SUlNUVZRVlVBQjZNUDRYRU1NR1ZGMlFXTlBMMjI2Q0EKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjQyCgkvLyBwcmVNYnIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9idXJ5IC01IC8vIHByZU1icjogdWludDY0CgoJLy8gU2VuZCBhc3NldCBiYWNrIHRvIGNyZWF0b3Igc2luY2UgdGhleSBhcmUgZ3VyYW50ZWVkIHRvIGJlIG9wdGVkIGluCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjQ1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjQ2CgkvLyBhc3NldFJlY2VpdmVyOiBhc2FDcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhQ3JlYXRvcjogYWNjb3VudAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMyAvLyBhc2E6IGFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NDgKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NDkKCS8vIGFzc2V0Q2xvc2VUbzogYXNhQ3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYUNyZWF0b3I6IGFjY291bnQKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo1MAoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo1MwoJLy8gdGhpcy5mdW5kZXJNYXAuZGVsZXRlKGFzYSkKCWZyYW1lX2RpZyAtMyAvLyBhc2E6IGFzc2V0CglpdG9iCglib3hfZGVsCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo1NQoJLy8gbWJyQW10ID0gcHJlTWJyIC0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAtNSAvLyBwcmVNYnI6IHVpbnQ2NAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CgktCglmcmFtZV9idXJ5IC02IC8vIG1ickFtdDogdWludDY0CgoJLy8gU2VuZCBNQlIgdG8gZmVlIHNpbmsKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NTgKCS8vIHNlbmRQYXltZW50KHsKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjU5CgkvLyByZWNlaXZlcjogZmVlU2luawoJZnJhbWVfZGlnIC0yIC8vIGZlZVNpbms6IGFjY291bnQKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjYwCgkvLyBhbW91bnQ6IG1ickFtdCAtIHRoaXMudHhuLmZlZQoJZnJhbWVfZGlnIC02IC8vIG1ickFtdDogdWludDY0Cgl0eG4gRmVlCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NjEKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoKCS8vIFNlbmQgZmVlIGJhY2sgdG8gc2VuZGVyCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjY1CgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo2NgoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NjcKCS8vIGFtb3VudDogdGhpcy50eG4uZmVlCgl0eG4gRmVlCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NjgKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoKCS8vIGlmMF9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzEKCS8vIGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy50b3RhbEFzc2V0cyA9PT0gMAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKCWFzc2VydAoJaW50IDAKCT09CglieiBpZjBfZW5kCgoJLy8gaWYwX2NvbnNlcXVlbnQKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzEKCS8vIHRoaXMuY2xvc2VBY2N0KHZhdWx0Q3JlYXRvcikKCWJ5dGUgMHgKCWZyYW1lX2RpZyAtNCAvLyB2YXVsdENyZWF0b3I6IGFjY291bnQKCWNhbGxzdWIgY2xvc2VBY2N0CgppZjBfZW5kOgoJcmV0c3ViCgphYmlfcm91dGVfb3B0SW46Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIG9wdEluCglpbnQgMQoJcmV0dXJuCgpvcHRJbjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzUKCS8vIGFzc2VydCghdGhpcy5mdW5kZXJNYXAuZXhpc3RzKGFzYSkpCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBhc3NldAoJaXRvYgoJYm94X2dldAoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjc2CgkvLyBhc3NlcnQobWJyUGF5bWVudC5zZW5kZXIgPT09IHRoaXMudHhuLnNlbmRlcikKCWZyYW1lX2RpZyAtMiAvLyBtYnJQYXltZW50OiBwYXkKCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzcKCS8vIGFzc2VydChtYnJQYXltZW50LnJlY2VpdmVyID09PSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjc5CgkvLyBwcmVNYnIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9idXJ5IC0zIC8vIHByZU1icjogdWludDY0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo4MQoJLy8gdGhpcy5mdW5kZXJNYXAucHV0KGFzYSwgdGhpcy50eG4uc2VuZGVyKQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogYXNzZXQKCWl0b2IKCXR4biBTZW5kZXIKCWJveF9wdXQKCgkvLyBPcHQgdmF1bHQgaW50byBhc2EKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODQKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODUKCS8vIGFzc2V0UmVjZWl2ZXI6IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODYKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODcKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo4OAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IGFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjkxCgkvLyBhc3NlcnQobWJyUGF5bWVudC5hbW91bnQgPT09IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTWJyKQoJZnJhbWVfZGlnIC0yIC8vIG1iclBheW1lbnQ6IHBheQoJZ3R4bnMgQW1vdW50CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMyAvLyBwcmVNYnI6IHVpbnQ2NAoJLQoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY2xhaW06Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIGNsYWltCglpbnQgMQoJcmV0dXJuCgpjbGFpbToKCXByb3RvIDQgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6OTUKCS8vIGFzc2VydCh0aGlzLmZ1bmRlck1hcC5leGlzdHMoYXNhKSkKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IGFzc2V0CglpdG9iCglib3hfZ2V0Cglzd2FwCglwb3AKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6OTYKCS8vIGFzc2VydChhc2FNYnJGdW5kZXIgPT09IHRoaXMuZnVuZGVyTWFwLmdldChhc2EpKQoJZnJhbWVfZGlnIC0zIC8vIGFzYU1ickZ1bmRlcjogYWNjb3VudAoJZnJhbWVfZGlnIC0xIC8vIGFzYTogYXNzZXQKCWl0b2IKCWJveF9nZXQKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6OTcKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMucmVjZWl2ZXIuZ2V0KCkpCgl0eG4gU2VuZGVyCglieXRlICJyZWNlaXZlciIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo5OAoJLy8gYXNzZXJ0KHRoaXMuY3JlYXRvci5nZXQoKSA9PT0gY3JlYXRvcikKCWJ5dGUgImNyZWF0b3IiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0yIC8vIGNyZWF0b3I6IGFjY291bnQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEwMAoJLy8gaW5pdGlhbE1iciA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTQgLy8gaW5pdGlhbE1icjogdWludDY0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDIKCS8vIHRoaXMuZnVuZGVyTWFwLmRlbGV0ZShhc2EpCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBhc3NldAoJaXRvYgoJYm94X2RlbAoKCS8vIFRyYW5zZmVyIGFsbCBvZiB0aGUgYXNzZXQgdG8gdGhlIHJlY2VpdmVyCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEwNQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDYKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDcKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDgKCS8vIGFzc2V0QW1vdW50OiBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MuYXNzZXRCYWxhbmNlKGFzYSkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEwOQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IGFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTEwCgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCWl0eG5fc3VibWl0CgoJLy8gU2VuZCBNQlIgdG8gdGhlIGZ1bmRlcgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMTQKCS8vIHNlbmRQYXltZW50KHsKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjExNQoJLy8gcmVjZWl2ZXI6IGFzYU1ickZ1bmRlcgoJZnJhbWVfZGlnIC0zIC8vIGFzYU1ickZ1bmRlcjogYWNjb3VudAoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTE2CgkvLyBhbW91bnQ6IGluaXRpYWxNYnIgLSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZnJhbWVfZGlnIC00IC8vIGluaXRpYWxNYnI6IHVpbnQ2NAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTE3CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCgkvLyBpZjFfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEyMAoJLy8gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLnRvdGFsQXNzZXRzID09PSAwCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwoJYXNzZXJ0CglpbnQgMAoJPT0KCWJ6IGlmMV9lbmQKCgkvLyBpZjFfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMjAKCS8vIHRoaXMuY2xvc2VBY2N0KGNyZWF0b3IpCglieXRlIDB4CglmcmFtZV9kaWcgLTIgLy8gY3JlYXRvcjogYWNjb3VudAoJY2FsbHN1YiBjbG9zZUFjY3QKCmlmMV9lbmQ6CglyZXRzdWIKCmJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGRlbGV0ZQoJaW50IDEKCXJldHVybgoKZGVsZXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMjUKCS8vIGFzc2VydCghZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLmhhc0JhbGFuY2UpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCSEKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTI2CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzKQoJdHhuIFNlbmRlcgoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb24KCnJvdXRlX2FiaToKCW1ldGhvZCAiY3JlYXRlKGFjY291bnQsYWNjb3VudCl2b2lkIgoJbWV0aG9kICJyZWplY3QoYWNjb3VudCxhY2NvdW50LGFzc2V0LGFjY291bnQpdm9pZCIKCW1ldGhvZCAib3B0SW4oYXNzZXQscGF5KXZvaWQiCgltZXRob2QgImNsYWltKGFzc2V0LGFjY291bnQsYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2NyZWF0ZSBhYmlfcm91dGVfcmVqZWN0IGFiaV9yb3V0ZV9vcHRJbiBhYmlfcm91dGVfY2xhaW0=","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"Vault","desc":"","methods":[{"name":"create","args":[{"name":"receiver","type":"account","desc":""},{"name":"sender","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"reject","args":[{"name":"asaCreator","type":"account","desc":""},{"name":"feeSink","type":"account","desc":""},{"name":"asa","type":"asset","desc":""},{"name":"vaultCreator","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"optIn","args":[{"name":"asa","type":"asset","desc":""},{"name":"mbrPayment","type":"pay","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"claim","args":[{"name":"asa","type":"asset","desc":""},{"name":"creator","type":"account","desc":""},{"name":"asaMbrFunder","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "create(account,account)void": { + "call_config": { + "createApplication": "CALL" + } + }, + "reject(account,account,asset,account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "optIn(asset,pay)void": { + "call_config": { + "no_op": "CALL" + } + }, + "claim(asset,account,account)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "delete_application": "CALL" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "creator": { + "type": "bytes", + "key": "creator" + }, + "master": { + "type": "uint64", + "key": "master" + }, + "receiver": { + "type": "bytes", + "key": "receiver" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 2, + "num_uints": 1 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKY2xvc2VBY2N0OgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxNAoJLy8gYXNzZXJ0KHZhdWx0Q3JlYXRvciA9PT0gdGhpcy5jcmVhdG9yLmdldCgpKQoJZnJhbWVfZGlnIC0xIC8vIHZhdWx0Q3JlYXRvcjogYWNjb3VudAoJYnl0ZSAiY3JlYXRvciIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gU2VuZCB0aGUgTUJSIHRvIHRoZSB2YXVsdCBjcmVhdG9yCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjE3CgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxOAoJLy8gcmVjZWl2ZXI6IHZhdWx0Q3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIHZhdWx0Q3JlYXRvcjogYWNjb3VudAoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTkKCS8vIGFtb3VudDogZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjIwCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MjIKCS8vIGNsb3NlUmVtYWluZGVyVG86IHRoaXMudHhuLnNlbmRlcgoJLy8gQW55IHJlbWFpbmluZyBiYWxhbmNlIGlzIHNlbnQgdGhlIHJlY2VpdmVyIGZvciB0aGUgdmF1bHQKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI1CgkvLyBkZWxldGVWYXVsdFR4biA9IHRoaXMudHhuR3JvdXBbdGhpcy50eG4uZ3JvdXBJbmRleCArIDFdCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCSsKCWZyYW1lX2J1cnkgLTIgLy8gZGVsZXRlVmF1bHRUeG46IHR4bgoKCS8vIEVuc3VyZSBNYXN0ZXIuZGVsZXRlVmF1bHQgaXMgYmVpbmcgY2FsbGVkIGZvciB0aGlzIHZhdWx0CgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI3CgkvLyBhc3NlcnQoZGVsZXRlVmF1bHRUeG4uYXBwbGljYXRpb25JRCA9PT0gdGhpcy5tYXN0ZXIuZ2V0KCkpCglmcmFtZV9kaWcgLTIgLy8gZGVsZXRlVmF1bHRUeG46IHR4bgoJZ3R4bnMgQXBwbGljYXRpb25JRAoJYnl0ZSAibWFzdGVyIgoJYXBwX2dsb2JhbF9nZXQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI4CgkvLyBhc3NlcnQoZGVsZXRlVmF1bHRUeG4uYXBwbGljYXRpb25BcmdzWzBdID09PSBtZXRob2QoJ2RlbGV0ZVZhdWx0KGFwcGxpY2F0aW9uLGFjY291bnQpdm9pZCcpKQoJZnJhbWVfZGlnIC0yIC8vIGRlbGV0ZVZhdWx0VHhuOiB0eG4KCWd0eG5zIEFwcGxpY2F0aW9uQXJncyAwCgltZXRob2QgImRlbGV0ZVZhdWx0KGFwcGxpY2F0aW9uLGFjY291bnQpdm9pZCIKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjI5CgkvLyBhc3NlcnQoZGVsZXRlVmF1bHRUeG4uYXBwbGljYXRpb25zWzFdID09PSB0aGlzLmFwcCkKCWZyYW1lX2RpZyAtMiAvLyBkZWxldGVWYXVsdFR4bjogdHhuCglndHhucyBBcHBsaWNhdGlvbnMgMQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY3JlYXRlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjM0CgkvLyB0aGlzLmNyZWF0b3IucHV0KHNlbmRlcikKCWJ5dGUgImNyZWF0b3IiCglmcmFtZV9kaWcgLTIgLy8gc2VuZGVyOiBhY2NvdW50CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MzUKCS8vIHRoaXMucmVjZWl2ZXIucHV0KHJlY2VpdmVyKQoJYnl0ZSAicmVjZWl2ZXIiCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czozNgoJLy8gdGhpcy5tYXN0ZXIucHV0KGdsb2JhbHMuY2FsbGVyQXBwbGljYXRpb25JRCkKCWJ5dGUgIm1hc3RlciIKCWdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgphYmlfcm91dGVfcmVqZWN0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgl0eG5hcyBBc3NldHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiByZWplY3QKCWludCAxCglyZXR1cm4KCnJlamVjdDoKCXByb3RvIDYgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NDAKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMucmVjZWl2ZXIuZ2V0KCkpCgl0eG4gU2VuZGVyCglieXRlICJyZWNlaXZlciIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo0MQoJLy8gYXNzZXJ0KGZlZVNpbmsgPT09IGFkZHIoJ1k3Nk0zTVNZNkRLQlJIQkw3QzNOTkRYR1M1SUlNUVZRVlVBQjZNUDRYRU1NR1ZGMlFXTlBMMjI2Q0EnKSkKCWZyYW1lX2RpZyAtMiAvLyBmZWVTaW5rOiBhY2NvdW50CglhZGRyIFk3Nk0zTVNZNkRLQlJIQkw3QzNOTkRYR1M1SUlNUVZRVlVBQjZNUDRYRU1NR1ZGMlFXTlBMMjI2Q0EKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjQyCgkvLyBwcmVNYnIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9idXJ5IC01IC8vIHByZU1icjogdWludDY0CgoJLy8gU2VuZCBhc3NldCBiYWNrIHRvIGNyZWF0b3Igc2luY2UgdGhleSBhcmUgZ3VyYW50ZWVkIHRvIGJlIG9wdGVkIGluCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjQ1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjQ2CgkvLyBhc3NldFJlY2VpdmVyOiBhc2FDcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhQ3JlYXRvcjogYWNjb3VudAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMyAvLyBhc2E6IGFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NDgKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NDkKCS8vIGFzc2V0Q2xvc2VUbzogYXNhQ3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYUNyZWF0b3I6IGFjY291bnQKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo1MAoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo1MwoJLy8gdGhpcy5mdW5kZXJNYXAuZGVsZXRlKGFzYSkKCWZyYW1lX2RpZyAtMyAvLyBhc2E6IGFzc2V0CglpdG9iCglib3hfZGVsCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo1NQoJLy8gbWJyQW10ID0gcHJlTWJyIC0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAtNSAvLyBwcmVNYnI6IHVpbnQ2NAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CgktCglmcmFtZV9idXJ5IC02IC8vIG1ickFtdDogdWludDY0CgoJLy8gU2VuZCBNQlIgdG8gZmVlIHNpbmsKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NTgKCS8vIHNlbmRQYXltZW50KHsKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjU5CgkvLyByZWNlaXZlcjogZmVlU2luawoJZnJhbWVfZGlnIC0yIC8vIGZlZVNpbms6IGFjY291bnQKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjYwCgkvLyBhbW91bnQ6IG1ickFtdCAtIHRoaXMudHhuLmZlZQoJZnJhbWVfZGlnIC02IC8vIG1ickFtdDogdWludDY0Cgl0eG4gRmVlCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NjEKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoKCS8vIFNlbmQgZmVlIGJhY2sgdG8gc2VuZGVyCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjY1CgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo2NgoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NjcKCS8vIGFtb3VudDogdGhpcy50eG4uZmVlCgl0eG4gRmVlCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NjgKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoKCS8vIGlmMF9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzEKCS8vIGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy50b3RhbEFzc2V0cyA9PT0gMAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBc3NldHMKCWFzc2VydAoJaW50IDAKCT09CglieiBpZjBfZW5kCgoJLy8gaWYwX2NvbnNlcXVlbnQKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzEKCS8vIHRoaXMuY2xvc2VBY2N0KHZhdWx0Q3JlYXRvcikKCWJ5dGUgMHgKCWZyYW1lX2RpZyAtNCAvLyB2YXVsdENyZWF0b3I6IGFjY291bnQKCWNhbGxzdWIgY2xvc2VBY2N0CgppZjBfZW5kOgoJcmV0c3ViCgphYmlfcm91dGVfb3B0SW46Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIG9wdEluCglpbnQgMQoJcmV0dXJuCgpvcHRJbjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzUKCS8vIGFzc2VydCghdGhpcy5mdW5kZXJNYXAuZXhpc3RzKGFzYSkpCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBhc3NldAoJaXRvYgoJYm94X2dldAoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjc2CgkvLyBhc3NlcnQobWJyUGF5bWVudC5zZW5kZXIgPT09IHRoaXMudHhuLnNlbmRlcikKCWZyYW1lX2RpZyAtMiAvLyBtYnJQYXltZW50OiBwYXkKCWd0eG5zIFNlbmRlcgoJdHhuIFNlbmRlcgoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6NzcKCS8vIGFzc2VydChtYnJQYXltZW50LnJlY2VpdmVyID09PSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpCglmcmFtZV9kaWcgLTIgLy8gbWJyUGF5bWVudDogcGF5CglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjc5CgkvLyBwcmVNYnIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9idXJ5IC0zIC8vIHByZU1icjogdWludDY0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo4MQoJLy8gdGhpcy5mdW5kZXJNYXAucHV0KGFzYSwgdGhpcy50eG4uc2VuZGVyKQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogYXNzZXQKCWl0b2IKCXR4biBTZW5kZXIKCWJveF9wdXQKCgkvLyBPcHQgdmF1bHQgaW50byBhc2EKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODQKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODUKCS8vIGFzc2V0UmVjZWl2ZXI6IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODYKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6ODcKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo4OAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IGFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjkxCgkvLyBhc3NlcnQobWJyUGF5bWVudC5hbW91bnQgPT09IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTWJyKQoJZnJhbWVfZGlnIC0yIC8vIG1iclBheW1lbnQ6IHBheQoJZ3R4bnMgQW1vdW50CglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2RpZyAtMyAvLyBwcmVNYnI6IHVpbnQ2NAoJLQoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY2xhaW06Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIGNsYWltCglpbnQgMQoJcmV0dXJuCgpjbGFpbToKCXByb3RvIDQgMAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6OTUKCS8vIGFzc2VydCh0aGlzLmZ1bmRlck1hcC5leGlzdHMoYXNhKSkKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IGFzc2V0CglpdG9iCglib3hfZ2V0Cglzd2FwCglwb3AKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6OTYKCS8vIGFzc2VydChhc2FNYnJGdW5kZXIgPT09IHRoaXMuZnVuZGVyTWFwLmdldChhc2EpKQoJZnJhbWVfZGlnIC0zIC8vIGFzYU1ickZ1bmRlcjogYWNjb3VudAoJZnJhbWVfZGlnIC0xIC8vIGFzYTogYXNzZXQKCWl0b2IKCWJveF9nZXQKCWFzc2VydAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6OTcKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMucmVjZWl2ZXIuZ2V0KCkpCgl0eG4gU2VuZGVyCglieXRlICJyZWNlaXZlciIKCWFwcF9nbG9iYWxfZ2V0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czo5OAoJLy8gYXNzZXJ0KHRoaXMuY3JlYXRvci5nZXQoKSA9PT0gY3JlYXRvcikKCWJ5dGUgImNyZWF0b3IiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0yIC8vIGNyZWF0b3I6IGFjY291bnQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEwMAoJLy8gaW5pdGlhbE1iciA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTQgLy8gaW5pdGlhbE1icjogdWludDY0CgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDIKCS8vIHRoaXMuZnVuZGVyTWFwLmRlbGV0ZShhc2EpCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBhc3NldAoJaXRvYgoJYm94X2RlbAoKCS8vIFRyYW5zZmVyIGFsbCBvZiB0aGUgYXNzZXQgdG8gdGhlIHJlY2VpdmVyCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEwNQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDYKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDcKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMDgKCS8vIGFzc2V0QW1vdW50OiBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MuYXNzZXRCYWxhbmNlKGFzYSkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBhc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglhc3NlcnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEwOQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IGFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTEwCgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCWl0eG5fc3VibWl0CgoJLy8gU2VuZCBNQlIgdG8gdGhlIGZ1bmRlcgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMTQKCS8vIHNlbmRQYXltZW50KHsKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjExNQoJLy8gcmVjZWl2ZXI6IGFzYU1ickZ1bmRlcgoJZnJhbWVfZGlnIC0zIC8vIGFzYU1ickZ1bmRlcjogYWNjb3VudAoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTE2CgkvLyBhbW91bnQ6IGluaXRpYWxNYnIgLSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZnJhbWVfZGlnIC00IC8vIGluaXRpYWxNYnI6IHVpbnQ2NAoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTE3CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCgkvLyBpZjFfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hcmMxMi9hcmMxMi5hbGdvLnRzOjEyMAoJLy8gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLnRvdGFsQXNzZXRzID09PSAwCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwoJYXNzZXJ0CglpbnQgMAoJPT0KCWJ6IGlmMV9lbmQKCgkvLyBpZjFfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMjAKCS8vIHRoaXMuY2xvc2VBY2N0KGNyZWF0b3IpCglieXRlIDB4CglmcmFtZV9kaWcgLTIgLy8gY3JlYXRvcjogYWNjb3VudAoJY2FsbHN1YiBjbG9zZUFjY3QKCmlmMV9lbmQ6CglyZXRzdWIKCmJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGRlbGV0ZQoJaW50IDEKCXJldHVybgoKZGVsZXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYXJjMTIvYXJjMTIuYWxnby50czoxMjUKCS8vIGFzc2VydCghZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLmhhc0JhbGFuY2UpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCSEKCWFzc2VydAoKCS8vIGV4YW1wbGVzL2FyYzEyL2FyYzEyLmFsZ28udHM6MTI2CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzKQoJdHhuIFNlbmRlcgoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb24KCnJvdXRlX2FiaToKCW1ldGhvZCAiY3JlYXRlKGFjY291bnQsYWNjb3VudCl2b2lkIgoJbWV0aG9kICJyZWplY3QoYWNjb3VudCxhY2NvdW50LGFzc2V0LGFjY291bnQpdm9pZCIKCW1ldGhvZCAib3B0SW4oYXNzZXQscGF5KXZvaWQiCgltZXRob2QgImNsYWltKGFzc2V0LGFjY291bnQsYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2NyZWF0ZSBhYmlfcm91dGVfcmVqZWN0IGFiaV9yb3V0ZV9vcHRJbiBhYmlfcm91dGVfY2xhaW0=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "Vault", + "desc": "", + "methods": [ + { + "name": "create", + "args": [ + { + "name": "receiver", + "type": "account", + "desc": "" + }, + { + "name": "sender", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "reject", + "args": [ + { + "name": "asaCreator", + "type": "account", + "desc": "" + }, + { + "name": "feeSink", + "type": "account", + "desc": "" + }, + { + "name": "asa", + "type": "asset", + "desc": "" + }, + { + "name": "vaultCreator", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "optIn", + "args": [ + { + "name": "asa", + "type": "asset", + "desc": "" + }, + { + "name": "mbrPayment", + "type": "pay", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "claim", + "args": [ + { + "name": "asa", + "type": "asset", + "desc": "" + }, + { + "name": "creator", + "type": "account", + "desc": "" + }, + { + "name": "asaMbrFunder", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/arc75/artifacts/ARC75.approval.teal b/examples/arc75/artifacts/ARC75.approval.teal index d804af223..5833c04b1 100644 --- a/examples/arc75/artifacts/ARC75.approval.teal +++ b/examples/arc75/artifacts/ARC75.approval.teal @@ -1,6 +1,39 @@ #pragma version 8 b main +process_dynamic_tuple_element: + proto 4 3 + frame_dig -4 // tuple head + frame_dig -2 // head offset + concat + frame_bury -4 // tuple head + frame_dig -1 // element + dup + len + frame_dig -2 // head offset + btoi + + + itob + extract 6 2 + frame_bury -2 // head offset + frame_dig -3 // tuple tail + swap + concat + frame_bury -3 // tuple tail + frame_dig -4 // tuple head + frame_dig -3 // tuple tail + frame_dig -2 // head offset + retsub + +process_static_tuple_element: + proto 4 3 + frame_dig -4 // tuple head + frame_dig -1 // element + concat + frame_dig -3 // tuple tail + frame_dig -2 // head offset + retsub + bare_route_create: txn OnCompletion int NoOp @@ -122,24 +155,13 @@ addAppToWhiteList: // examples/arc75/arc75.algo.ts:37 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0024 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0024 // initial head offset txn Sender - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element frame_dig -2 // boxIndex: uint16 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element frame_dig -1 // arc: bytes dup len @@ -147,21 +169,9 @@ addAppToWhiteList: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -6 // whitelist: Whitelist // if0_condition @@ -260,24 +270,13 @@ setAppWhitelist: // examples/arc75/arc75.algo.ts:59 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0024 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0024 // initial head offset txn Sender - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element frame_dig -2 // boxIndex: uint16 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element frame_dig -1 // arc: bytes dup len @@ -285,21 +284,9 @@ setAppWhitelist: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -5 // whitelist: Whitelist // examples/arc75/arc75.algo.ts:61 @@ -379,24 +366,13 @@ deleteWhitelist: // examples/arc75/arc75.algo.ts:81 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0024 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0024 // initial head offset txn Sender - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element frame_dig -2 // boxIndex: uint16 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element frame_dig -1 // arc: bytes dup len @@ -404,21 +380,9 @@ deleteWhitelist: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -4 // whitelist: Whitelist // examples/arc75/arc75.algo.ts:83 @@ -468,24 +432,13 @@ deleteAppFromWhitelist: // examples/arc75/arc75.algo.ts:98 // whitelist: Whitelist = { account: this.txn.sender, boxIndex: boxIndex, arc: arc } - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0024 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0024 // initial head offset txn Sender - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element frame_dig -2 // boxIndex: uint16 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element frame_dig -1 // arc: bytes dup len @@ -493,21 +446,9 @@ deleteAppFromWhitelist: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -6 // whitelist: Whitelist // examples/arc75/arc75.algo.ts:100 diff --git a/examples/arc75/artifacts/ARC75.json b/examples/arc75/artifacts/ARC75.json index 80c25ffb7..b2234ff72 100644 --- a/examples/arc75/artifacts/ARC75.json +++ b/examples/arc75/artifacts/ARC75.json @@ -1 +1,162 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKdmVyaWZ5TUJSUGF5bWVudDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTMKCS8vIGFzc2VydChwYXltZW50LmFtb3VudCA9PT0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSKQoJZnJhbWVfZGlnIC0xIC8vIHBheW1lbnQ6IHBheQoJZ3R4bnMgQW1vdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gcHJlTUJSOiB1aW50NjQKCS0KCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjE0CgkvLyBhc3NlcnQocGF5bWVudC5yZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBwYXkKCWd0eG5zIFJlY2VpdmVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCT09Cglhc3NlcnQKCXJldHN1YgoKc2VuZE1CUlBheW1lbnQ6Cglwcm90byAxIDAKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjE4CgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxOQoJLy8gc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoyMAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MjEKCS8vIGFtb3VudDogcHJlTUJSIC0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTEgLy8gcHJlTUJSOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoyMgoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9hZGRBcHBUb1doaXRlTGlzdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwbiAyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIGFkZEFwcFRvV2hpdGVMaXN0CglpbnQgMQoJcmV0dXJuCgphZGRBcHBUb1doaXRlTGlzdDoKCXByb3RvIDcgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzYKCS8vIHByZU1CUiA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJZnJhbWVfYnVyeSAtNSAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzcKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMjQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCgl0eG4gU2VuZGVyCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMiAvLyBib3hJbmRleDogdWludDE2Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjM5CgkvLyB0aGlzLndoaXRlbGlzdC5leGlzdHMod2hpdGVsaXN0KQoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0Cglzd2FwCglwb3AKCWJ6IGlmMF9lbHNlCgoJLy8gaWYwX2NvbnNlcXVlbnQKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NDAKCS8vIHRoaXMud2hpdGVsaXN0LmdldCh3aGl0ZWxpc3QpLnB1c2goYXBwSUQpCglmcmFtZV9kaWcgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCWFzc2VydAoJZHVwCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJZXh0cmFjdCAyIDAKCWNvbmNhdAoJZnJhbWVfZGlnIC0zIC8vIGFwcElEOiB1aW50NjQKCWl0b2IKCWNvbmNhdAoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CglkdXAKCWJveF9kZWwKCXBvcAoJc3dhcAoJYm94X3B1dAoJYiBpZjBfZW5kCgppZjBfZWxzZToKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NDIKCS8vIG5ld1doaXRlbGlzdDogdWludDY0W10gPSBbYXBwSURdCglmcmFtZV9kaWcgLTMgLy8gYXBwSUQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNyAvLyBuZXdXaGl0ZWxpc3Q6IHVpbnQ2NFtdCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo0MwoJLy8gdGhpcy53aGl0ZWxpc3QucHV0KHdoaXRlbGlzdCwgbmV3V2hpdGVsaXN0KQoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CglkdXAKCWJveF9kZWwKCXBvcAoJZnJhbWVfZGlnIC03IC8vIG5ld1doaXRlbGlzdDogdWludDY0W10KCWJveF9wdXQKCmlmMF9lbmQ6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQ2CgkvLyB0aGlzLnZlcmlmeU1CUlBheW1lbnQocGF5bWVudCwgcHJlTUJSKQoJZnJhbWVfZGlnIC01IC8vIHByZU1CUjogdWludDY0CglmcmFtZV9kaWcgLTQgLy8gcGF5bWVudDogcGF5CgljYWxsc3ViIHZlcmlmeU1CUlBheW1lbnQKCXJldHN1YgoKYWJpX3JvdXRlX3NldEFwcFdoaXRlbGlzdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoJY2FsbHN1YiBzZXRBcHBXaGl0ZWxpc3QKCWludCAxCglyZXR1cm4KCnNldEFwcFdoaXRlbGlzdDoKCXByb3RvIDUgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NTgKCS8vIHByZU1CUiA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJZnJhbWVfYnVyeSAtNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NTkKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMjQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCgl0eG4gU2VuZGVyCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMiAvLyBib3hJbmRleDogdWludDE2Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTUgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjYxCgkvLyB0aGlzLndoaXRlbGlzdC5kZWxldGUod2hpdGVsaXN0KQoJZnJhbWVfZGlnIC01IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZGVsCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo2MwoJLy8gdGhpcy53aGl0ZWxpc3QucHV0KHdoaXRlbGlzdCwgYXBwSURzKQoJZnJhbWVfZGlnIC01IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CglkdXAKCWJveF9kZWwKCXBvcAoJZnJhbWVfZGlnIC0zIC8vIGFwcElEczogdWludDY0W10KCWJveF9wdXQKCgkvLyBpZjFfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjY1CgkvLyBwcmVNQlIgPiB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAtNCAvLyBwcmVNQlI6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJPgoJYnogaWYxX2Vsc2UKCgkvLyBpZjFfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo2NgoJLy8gdGhpcy5zZW5kTUJSUGF5bWVudChwcmVNQlIpCglmcmFtZV9kaWcgLTQgLy8gcHJlTUJSOiB1aW50NjQKCWNhbGxzdWIgc2VuZE1CUlBheW1lbnQKCWIgaWYxX2VuZAoKaWYxX2Vsc2U6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjY4CgkvLyB0aGlzLnZlcmlmeU1CUlBheW1lbnQodGhpcy50eG5Hcm91cFt0aGlzLnR4bi5ncm91cEluZGV4IC0gMV0sIHByZU1CUikKCWZyYW1lX2RpZyAtNCAvLyBwcmVNQlI6IHVpbnQ2NAoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIHZlcmlmeU1CUlBheW1lbnQKCmlmMV9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV9kZWxldGVXaGl0ZWxpc3Q6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgZGVsZXRlV2hpdGVsaXN0CglpbnQgMQoJcmV0dXJuCgpkZWxldGVXaGl0ZWxpc3Q6Cglwcm90byA0IDAKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjgwCgkvLyBwcmVNQlIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTMgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjgxCgkvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdCA9IHsgYWNjb3VudDogdGhpcy50eG4uc2VuZGVyLCBib3hJbmRleDogYm94SW5kZXgsIGFyYzogYXJjIH0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDI0CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJdHhuIFNlbmRlcgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gYXJjOiBieXRlcwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC00IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo4MwoJLy8gdGhpcy53aGl0ZWxpc3QuZGVsZXRlKHdoaXRlbGlzdCkKCWZyYW1lX2RpZyAtNCAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2RlbAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6ODUKCS8vIHRoaXMuc2VuZE1CUlBheW1lbnQocHJlTUJSKQoJZnJhbWVfZGlnIC0zIC8vIHByZU1CUjogdWludDY0CgljYWxsc3ViIHNlbmRNQlJQYXltZW50CglyZXRzdWIKCmFiaV9yb3V0ZV9kZWxldGVBcHBGcm9tV2hpdGVsaXN0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QKCWludCAxCglyZXR1cm4KCmRlbGV0ZUFwcEZyb21XaGl0ZWxpc3Q6Cglwcm90byA3IDAKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjk3CgkvLyBwcmVNQlIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTUgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjk4CgkvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdCA9IHsgYWNjb3VudDogdGhpcy50eG4uc2VuZGVyLCBib3hJbmRleDogYm94SW5kZXgsIGFyYzogYXJjIH0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDI0CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJdHhuIFNlbmRlcgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gYXJjOiBieXRlcwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxMDAKCS8vIHNwbGljZWQgPSB0aGlzLndoaXRlbGlzdC5nZXQod2hpdGVsaXN0KS5zcGxpY2UoaW5kZXgsIDEpCglmcmFtZV9kaWcgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCWFzc2VydAoJaW50IDAKCWV4dHJhY3RfdWludDE2CglpbnQgMQoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtNCAvLyBpbmRleDogdWludDY0CglpbnQgOAoJKgoJaW50IDIKCSsKCXN0b3JlIDEyIC8vIHNwbGljZSBzdGFydAoJaW50IDEKCWludCA4CgkqCglpbnQgOAoJKwoJc3RvcmUgMTMgLy8gc3BsaWNlIGJ5dGUgbGVuZ3RoCglmcmFtZV9kaWcgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCWFzc2VydAoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCWFzc2VydAoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDgKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtNiAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2dldAoJYXNzZXJ0Cglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWludCA4CgktCglleHRyYWN0MwoJY29uY2F0Cglzd2FwCglmcmFtZV9kaWcgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWR1cAoJYm94X2RlbAoJcG9wCglzd2FwCglib3hfcHV0CglmcmFtZV9idXJ5IC03IC8vIHNwbGljZWQ6IHVpbnQ2NFtdCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxMDIKCS8vIGFzc2VydChzcGxpY2VkWzBdID09PSBhcHBJRCkKCWZyYW1lX2RpZyAtNyAvLyBzcGxpY2VkOiB1aW50NjRbXQoJaW50IDAKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJZnJhbWVfZGlnIC0zIC8vIGFwcElEOiB1aW50NjQKCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjEwNAoJLy8gdGhpcy5zZW5kTUJSUGF5bWVudChwcmVNQlIpCglmcmFtZV9kaWcgLTUgLy8gcHJlTUJSOiB1aW50NjQKCWNhbGxzdWIgc2VuZE1CUlBheW1lbnQKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CglibnogYmFyZV9yb3V0ZV9jcmVhdGUKCnJvdXRlX2FiaToKCW1ldGhvZCAiYWRkQXBwVG9XaGl0ZUxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjQscGF5KXZvaWQiCgltZXRob2QgInNldEFwcFdoaXRlbGlzdChzdHJpbmcsdWludDE2LHVpbnQ2NFtdKXZvaWQiCgltZXRob2QgImRlbGV0ZVdoaXRlbGlzdChzdHJpbmcsdWludDE2KXZvaWQiCgltZXRob2QgImRlbGV0ZUFwcEZyb21XaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjQsdWludDY0KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfYWRkQXBwVG9XaGl0ZUxpc3QgYWJpX3JvdXRlX3NldEFwcFdoaXRlbGlzdCBhYmlfcm91dGVfZGVsZXRlV2hpdGVsaXN0IGFiaV9yb3V0ZV9kZWxldGVBcHBGcm9tV2hpdGVsaXN0","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"ARC75","desc":"","methods":[{"name":"addAppToWhiteList","args":[{"name":"arc","type":"string","desc":""},{"name":"boxIndex","type":"uint16","desc":""},{"name":"appID","type":"uint64","desc":""},{"name":"payment","type":"pay","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"setAppWhitelist","args":[{"name":"arc","type":"string","desc":""},{"name":"boxIndex","type":"uint16","desc":""},{"name":"appIDs","type":"uint64[]","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"deleteWhitelist","args":[{"name":"arc","type":"string","desc":""},{"name":"boxIndex","type":"uint16","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"deleteAppFromWhitelist","args":[{"name":"arc","type":"string","desc":""},{"name":"boxIndex","type":"uint16","desc":""},{"name":"appID","type":"uint64","desc":""},{"name":"index","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "addAppToWhiteList(string,uint16,uint64,pay)void": { + "call_config": { + "no_op": "CALL" + } + }, + "setAppWhitelist(string,uint16,uint64[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "deleteWhitelist(string,uint16)void": { + "call_config": { + "no_op": "CALL" + } + }, + "deleteAppFromWhitelist(string,uint16,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJZHVwCglsZW4KCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2J1cnkgLTIgLy8gaGVhZCBvZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDQgMwoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBlbGVtZW50Cgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKdmVyaWZ5TUJSUGF5bWVudDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTMKCS8vIGFzc2VydChwYXltZW50LmFtb3VudCA9PT0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSKQoJZnJhbWVfZGlnIC0xIC8vIHBheW1lbnQ6IHBheQoJZ3R4bnMgQW1vdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gcHJlTUJSOiB1aW50NjQKCS0KCT09Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjE0CgkvLyBhc3NlcnQocGF5bWVudC5yZWNlaXZlciA9PT0gdGhpcy5hcHAuYWRkcmVzcykKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBwYXkKCWd0eG5zIFJlY2VpdmVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCT09Cglhc3NlcnQKCXJldHN1YgoKc2VuZE1CUlBheW1lbnQ6Cglwcm90byAxIDAKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjE4CgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxOQoJLy8gc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoyMAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MjEKCS8vIGFtb3VudDogcHJlTUJSIC0gdGhpcy5hcHAuYWRkcmVzcy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTEgLy8gcHJlTUJSOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoyMgoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9hZGRBcHBUb1doaXRlTGlzdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwbiAyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIGFkZEFwcFRvV2hpdGVMaXN0CglpbnQgMQoJcmV0dXJuCgphZGRBcHBUb1doaXRlTGlzdDoKCXByb3RvIDcgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzYKCS8vIHByZU1CUiA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJZnJhbWVfYnVyeSAtNSAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MzcKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAyNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0Cgl0eG4gU2VuZGVyCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMiAvLyBib3hJbmRleDogdWludDE2CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CgoJLy8gaWYwX2NvbmRpdGlvbgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czozOQoJLy8gdGhpcy53aGl0ZWxpc3QuZXhpc3RzKHdoaXRlbGlzdCkKCWZyYW1lX2RpZyAtNiAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2dldAoJc3dhcAoJcG9wCglieiBpZjBfZWxzZQoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQwCgkvLyB0aGlzLndoaXRlbGlzdC5nZXQod2hpdGVsaXN0KS5wdXNoKGFwcElEKQoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0Cglhc3NlcnQKCWR1cAoJaW50IDAKCWV4dHJhY3RfdWludDE2CglpbnQgMQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWV4dHJhY3QgMiAwCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBhcHBJRDogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtNiAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJZHVwCglib3hfZGVsCglwb3AKCXN3YXAKCWJveF9wdXQKCWIgaWYwX2VuZAoKaWYwX2Vsc2U6CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjQyCgkvLyBuZXdXaGl0ZWxpc3Q6IHVpbnQ2NFtdID0gW2FwcElEXQoJZnJhbWVfZGlnIC0zIC8vIGFwcElEOiB1aW50NjQKCWl0b2IKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTcgLy8gbmV3V2hpdGVsaXN0OiB1aW50NjRbXQoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NDMKCS8vIHRoaXMud2hpdGVsaXN0LnB1dCh3aGl0ZWxpc3QsIG5ld1doaXRlbGlzdCkKCWZyYW1lX2RpZyAtNiAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJZHVwCglib3hfZGVsCglwb3AKCWZyYW1lX2RpZyAtNyAvLyBuZXdXaGl0ZWxpc3Q6IHVpbnQ2NFtdCglib3hfcHV0CgppZjBfZW5kOgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo0NgoJLy8gdGhpcy52ZXJpZnlNQlJQYXltZW50KHBheW1lbnQsIHByZU1CUikKCWZyYW1lX2RpZyAtNSAvLyBwcmVNQlI6IHVpbnQ2NAoJZnJhbWVfZGlnIC00IC8vIHBheW1lbnQ6IHBheQoJY2FsbHN1YiB2ZXJpZnlNQlJQYXltZW50CglyZXRzdWIKCmFiaV9yb3V0ZV9zZXRBcHBXaGl0ZWxpc3Q6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgc2V0QXBwV2hpdGVsaXN0CglpbnQgMQoJcmV0dXJuCgpzZXRBcHBXaGl0ZWxpc3Q6Cglwcm90byA1IDAKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjU4CgkvLyBwcmVNQlIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjU5CgkvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdCA9IHsgYWNjb3VudDogdGhpcy50eG4uc2VuZGVyLCBib3hJbmRleDogYm94SW5kZXgsIGFyYzogYXJjIH0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMjQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTEgLy8gYXJjOiBieXRlcwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtNSAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NjEKCS8vIHRoaXMud2hpdGVsaXN0LmRlbGV0ZSh3aGl0ZWxpc3QpCglmcmFtZV9kaWcgLTUgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9kZWwKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjYzCgkvLyB0aGlzLndoaXRlbGlzdC5wdXQod2hpdGVsaXN0LCBhcHBJRHMpCglmcmFtZV9kaWcgLTUgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWR1cAoJYm94X2RlbAoJcG9wCglmcmFtZV9kaWcgLTMgLy8gYXBwSURzOiB1aW50NjRbXQoJYm94X3B1dAoKCS8vIGlmMV9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NjUKCS8vIHByZU1CUiA+IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJZnJhbWVfZGlnIC00IC8vIHByZU1CUjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJYXNzZXJ0Cgk+CglieiBpZjFfZWxzZQoKCS8vIGlmMV9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjY2CgkvLyB0aGlzLnNlbmRNQlJQYXltZW50KHByZU1CUikKCWZyYW1lX2RpZyAtNCAvLyBwcmVNQlI6IHVpbnQ2NAoJY2FsbHN1YiBzZW5kTUJSUGF5bWVudAoJYiBpZjFfZW5kCgppZjFfZWxzZToKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6NjgKCS8vIHRoaXMudmVyaWZ5TUJSUGF5bWVudCh0aGlzLnR4bkdyb3VwW3RoaXMudHhuLmdyb3VwSW5kZXggLSAxXSwgcHJlTUJSKQoJZnJhbWVfZGlnIC00IC8vIHByZU1CUjogdWludDY0Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWNhbGxzdWIgdmVyaWZ5TUJSUGF5bWVudAoKaWYxX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2RlbGV0ZVdoaXRlbGlzdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoJY2FsbHN1YiBkZWxldGVXaGl0ZWxpc3QKCWludCAxCglyZXR1cm4KCmRlbGV0ZVdoaXRlbGlzdDoKCXByb3RvIDQgMAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6ODAKCS8vIHByZU1CUiA9IHRoaXMuYXBwLmFkZHJlc3MubWluQmFsYW5jZQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCWFzc2VydAoJZnJhbWVfYnVyeSAtMyAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6ODEKCS8vIHdoaXRlbGlzdDogV2hpdGVsaXN0ID0geyBhY2NvdW50OiB0aGlzLnR4bi5zZW5kZXIsIGJveEluZGV4OiBib3hJbmRleCwgYXJjOiBhcmMgfQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAyNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0Cgl0eG4gU2VuZGVyCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMiAvLyBib3hJbmRleDogdWludDE2CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWZyYW1lX2RpZyAtMSAvLyBhcmM6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC00IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czo4MwoJLy8gdGhpcy53aGl0ZWxpc3QuZGVsZXRlKHdoaXRlbGlzdCkKCWZyYW1lX2RpZyAtNCAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoJYm94X2RlbAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6ODUKCS8vIHRoaXMuc2VuZE1CUlBheW1lbnQocHJlTUJSKQoJZnJhbWVfZGlnIC0zIC8vIHByZU1CUjogdWludDY0CgljYWxsc3ViIHNlbmRNQlJQYXltZW50CglyZXRzdWIKCmFiaV9yb3V0ZV9kZWxldGVBcHBGcm9tV2hpdGVsaXN0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDQKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIGRlbGV0ZUFwcEZyb21XaGl0ZWxpc3QKCWludCAxCglyZXR1cm4KCmRlbGV0ZUFwcEZyb21XaGl0ZWxpc3Q6Cglwcm90byA3IDAKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjk3CgkvLyBwcmVNQlIgPSB0aGlzLmFwcC5hZGRyZXNzLm1pbkJhbGFuY2UKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWZyYW1lX2J1cnkgLTUgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBleGFtcGxlcy9hcmM3NS9hcmM3NS5hbGdvLnRzOjk4CgkvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdCA9IHsgYWNjb3VudDogdGhpcy50eG4uc2VuZGVyLCBib3hJbmRleDogYm94SW5kZXgsIGFyYzogYXJjIH0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMjQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJdHhuIFNlbmRlcgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gYm94SW5kZXg6IHVpbnQxNgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglmcmFtZV9kaWcgLTEgLy8gYXJjOiBieXRlcwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtNiAvLyB3aGl0ZWxpc3Q6IFdoaXRlbGlzdAoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTAwCgkvLyBzcGxpY2VkID0gdGhpcy53aGl0ZWxpc3QuZ2V0KHdoaXRlbGlzdCkuc3BsaWNlKGluZGV4LCAxKQoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0Cglhc3NlcnQKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglmcmFtZV9kaWcgLTQgLy8gaW5kZXg6IHVpbnQ2NAoJaW50IDgKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgOAoJKgoJaW50IDgKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0Cglhc3NlcnQKCWludCAyCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJc3Vic3RyaW5nMwoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0Cglib3hfZ2V0Cglhc3NlcnQKCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAyCglmcmFtZV9kaWcgLTYgLy8gd2hpdGVsaXN0OiBXaGl0ZWxpc3QKCWJveF9nZXQKCWFzc2VydAoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMTMgLy8gc3BsaWNlIGJ5dGUgbGVuZ3RoCglpbnQgOAoJLQoJZXh0cmFjdDMKCWNvbmNhdAoJc3dhcAoJZnJhbWVfZGlnIC02IC8vIHdoaXRlbGlzdDogV2hpdGVsaXN0CglkdXAKCWJveF9kZWwKCXBvcAoJc3dhcAoJYm94X3B1dAoJZnJhbWVfYnVyeSAtNyAvLyBzcGxpY2VkOiB1aW50NjRbXQoKCS8vIGV4YW1wbGVzL2FyYzc1L2FyYzc1LmFsZ28udHM6MTAyCgkvLyBhc3NlcnQoc3BsaWNlZFswXSA9PT0gYXBwSUQpCglmcmFtZV9kaWcgLTcgLy8gc3BsaWNlZDogdWludDY0W10KCWludCAwCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtMyAvLyBhcHBJRDogdWludDY0Cgk9PQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvYXJjNzUvYXJjNzUuYWxnby50czoxMDQKCS8vIHRoaXMuc2VuZE1CUlBheW1lbnQocHJlTUJSKQoJZnJhbWVfZGlnIC01IC8vIHByZU1CUjogdWludDY0CgljYWxsc3ViIHNlbmRNQlJQYXltZW50CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgImFkZEFwcFRvV2hpdGVMaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHBheSl2b2lkIgoJbWV0aG9kICJzZXRBcHBXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNix1aW50NjRbXSl2b2lkIgoJbWV0aG9kICJkZWxldGVXaGl0ZWxpc3Qoc3RyaW5nLHVpbnQxNil2b2lkIgoJbWV0aG9kICJkZWxldGVBcHBGcm9tV2hpdGVsaXN0KHN0cmluZyx1aW50MTYsdWludDY0LHVpbnQ2NCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2FkZEFwcFRvV2hpdGVMaXN0IGFiaV9yb3V0ZV9zZXRBcHBXaGl0ZWxpc3QgYWJpX3JvdXRlX2RlbGV0ZVdoaXRlbGlzdCBhYmlfcm91dGVfZGVsZXRlQXBwRnJvbVdoaXRlbGlzdA==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "ARC75", + "desc": "", + "methods": [ + { + "name": "addAppToWhiteList", + "args": [ + { + "name": "arc", + "type": "string", + "desc": "" + }, + { + "name": "boxIndex", + "type": "uint16", + "desc": "" + }, + { + "name": "appID", + "type": "uint64", + "desc": "" + }, + { + "name": "payment", + "type": "pay", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "setAppWhitelist", + "args": [ + { + "name": "arc", + "type": "string", + "desc": "" + }, + { + "name": "boxIndex", + "type": "uint16", + "desc": "" + }, + { + "name": "appIDs", + "type": "uint64[]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "deleteWhitelist", + "args": [ + { + "name": "arc", + "type": "string", + "desc": "" + }, + { + "name": "boxIndex", + "type": "uint16", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "deleteAppFromWhitelist", + "args": [ + { + "name": "arc", + "type": "string", + "desc": "" + }, + { + "name": "boxIndex", + "type": "uint16", + "desc": "" + }, + { + "name": "appID", + "type": "uint64", + "desc": "" + }, + { + "name": "index", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/arc75/artifacts/ARC75.src_map.json b/examples/arc75/artifacts/ARC75.src_map.json index 2eb643894..32f068e94 100644 --- a/examples/arc75/artifacts/ARC75.src_map.json +++ b/examples/arc75/artifacts/ARC75.src_map.json @@ -17,793 +17,703 @@ "15": 1, "16": 4, "17": 4, - "18": 5, - "19": 6, - "20": 7, - "21": 7, - "22": 8, - "23": 9, - "24": 10, - "25": 11, - "26": 12, - "27": 12, - "28": 12, - "29": 13, - "30": 14, - "31": 17, - "32": 17, - "33": 17, - "34": 18, - "35": 21, - "36": 21, - "37": 21, - "38": 25, - "39": 25, - "40": 26, - "41": 26, - "42": 27, - "43": 27, - "44": 27, - "45": 28, - "46": 28, - "47": 29, - "48": 30, - "49": 30, - "50": 31, - "51": 32, - "52": 32, - "53": 33, - "54": 34, - "55": 35, - "56": 39, - "57": 39, - "58": 40, - "59": 40, - "60": 41, - "61": 41, - "62": 41, - "63": 42, - "64": 42, - "65": 43, - "66": 44, - "67": 45, - "68": 46, - "69": 49, - "70": 49, - "71": 49, - "72": 53, - "73": 54, - "74": 55, - "75": 55, - "76": 59, - "77": 59, - "78": 59, - "79": 60, - "80": 60, - "81": 61, - "82": 62, - "83": 62, - "84": 66, - "85": 66, - "86": 67, - "87": 67, - "88": 71, - "89": 71, - "90": 72, - "91": 72, - "92": 72, - "93": 73, - "94": 73, - "95": 74, - "96": 75, - "97": 75, - "98": 76, - "99": 77, - "100": 78, - "101": 78, - "102": 82, - "103": 83, - "104": 83, - "105": 84, - "106": 85, - "107": 88, - "108": 88, - "109": 89, - "110": 90, - "111": 91, - "112": 91, - "113": 92, - "114": 93, - "115": 94, - "116": 95, - "117": 96, - "118": 97, - "119": 97, - "120": 98, - "121": 98, - "122": 99, - "123": 100, - "124": 101, - "125": 101, - "126": 101, - "127": 102, - "128": 103, - "129": 103, - "130": 103, - "131": 104, - "132": 104, - "133": 104, - "134": 105, - "135": 105, - "136": 105, - "137": 106, - "138": 106, - "139": 106, - "140": 107, - "141": 108, - "142": 111, - "143": 111, - "144": 111, - "145": 115, - "146": 115, - "147": 115, - "148": 116, - "149": 116, - "150": 117, - "151": 118, - "152": 118, - "153": 119, - "154": 120, - "155": 120, - "156": 124, - "157": 125, - "158": 126, - "159": 126, - "160": 127, - "161": 127, - "162": 128, - "163": 129, - "164": 129, - "165": 130, - "166": 130, - "167": 131, - "168": 131, - "169": 132, - "170": 133, - "171": 133, - "172": 134, - "173": 134, - "174": 135, - "175": 135, - "176": 136, - "177": 137, - "178": 137, - "179": 138, - "180": 138, - "181": 139, - "182": 139, - "183": 140, - "184": 141, - "185": 141, - "186": 142, - "187": 142, - "188": 143, - "189": 144, - "190": 145, - "191": 146, - "192": 146, - "193": 146, - "194": 147, + "18": 4, + "19": 5, + "20": 5, + "21": 6, + "22": 6, + "23": 7, + "24": 8, + "25": 8, + "26": 9, + "27": 9, + "28": 10, + "29": 11, + "30": 12, + "31": 12, + "32": 13, + "33": 14, + "34": 15, + "35": 16, + "36": 16, + "37": 16, + "38": 17, + "39": 17, + "40": 18, + "41": 18, + "42": 19, + "43": 20, + "44": 21, + "45": 21, + "46": 22, + "47": 22, + "48": 23, + "49": 23, + "50": 24, + "51": 24, + "52": 25, + "53": 28, + "54": 28, + "55": 28, + "56": 29, + "57": 29, + "58": 30, + "59": 30, + "60": 31, + "61": 32, + "62": 32, + "63": 33, + "64": 33, + "65": 34, + "66": 37, + "67": 37, + "68": 38, + "69": 39, + "70": 40, + "71": 40, + "72": 41, + "73": 42, + "74": 43, + "75": 44, + "76": 45, + "77": 45, + "78": 45, + "79": 46, + "80": 47, + "81": 50, + "82": 50, + "83": 50, + "84": 51, + "85": 54, + "86": 54, + "87": 54, + "88": 58, + "89": 58, + "90": 59, + "91": 59, + "92": 60, + "93": 60, + "94": 60, + "95": 61, + "96": 61, + "97": 62, + "98": 63, + "99": 63, + "100": 64, + "101": 65, + "102": 65, + "103": 66, + "104": 67, + "105": 68, + "106": 72, + "107": 72, + "108": 73, + "109": 73, + "110": 74, + "111": 74, + "112": 74, + "113": 75, + "114": 75, + "115": 76, + "116": 77, + "117": 78, + "118": 79, + "119": 82, + "120": 82, + "121": 82, + "122": 86, + "123": 87, + "124": 88, + "125": 88, + "126": 92, + "127": 92, + "128": 92, + "129": 93, + "130": 93, + "131": 94, + "132": 95, + "133": 95, + "134": 99, + "135": 99, + "136": 100, + "137": 100, + "138": 104, + "139": 104, + "140": 105, + "141": 105, + "142": 105, + "143": 106, + "144": 106, + "145": 107, + "146": 108, + "147": 108, + "148": 109, + "149": 110, + "150": 111, + "151": 111, + "152": 115, + "153": 116, + "154": 116, + "155": 117, + "156": 118, + "157": 121, + "158": 121, + "159": 122, + "160": 123, + "161": 124, + "162": 124, + "163": 125, + "164": 126, + "165": 127, + "166": 128, + "167": 129, + "168": 130, + "169": 130, + "170": 131, + "171": 131, + "172": 132, + "173": 133, + "174": 134, + "175": 134, + "176": 134, + "177": 135, + "178": 136, + "179": 136, + "180": 136, + "181": 137, + "182": 137, + "183": 137, + "184": 138, + "185": 138, + "186": 138, + "187": 139, + "188": 139, + "189": 139, + "190": 140, + "191": 141, + "192": 144, + "193": 144, + "194": 144, "195": 148, - "196": 149, - "197": 150, - "198": 151, - "199": 151, - "200": 152, - "201": 153, - "202": 154, - "203": 155, - "204": 155, - "205": 155, - "206": 156, - "207": 156, - "208": 157, - "209": 157, - "210": 158, - "211": 159, - "212": 160, - "213": 160, - "214": 161, - "215": 161, - "216": 162, - "217": 162, + "196": 148, + "197": 148, + "198": 149, + "199": 149, + "200": 150, + "201": 151, + "202": 151, + "203": 152, + "204": 153, + "205": 153, + "206": 157, + "207": 158, + "208": 159, + "209": 160, + "210": 160, + "211": 161, + "212": 161, + "213": 161, + "214": 162, + "215": 162, + "216": 163, + "217": 163, "218": 163, "219": 164, "220": 164, - "221": 169, - "222": 169, - "223": 170, - "224": 171, - "225": 172, - "226": 173, - "227": 173, - "228": 173, - "229": 178, - "230": 178, - "231": 179, - "232": 180, - "233": 181, - "234": 182, - "235": 183, - "236": 184, - "237": 185, - "238": 186, - "239": 187, - "240": 187, - "241": 187, - "242": 188, - "243": 189, - "244": 189, - "245": 189, - "246": 190, - "247": 191, + "221": 165, + "222": 166, + "223": 167, + "224": 168, + "225": 168, + "226": 168, + "227": 169, + "228": 170, + "229": 171, + "230": 171, + "231": 171, + "232": 172, + "233": 173, + "234": 174, + "235": 174, + "236": 179, + "237": 179, + "238": 180, + "239": 181, + "240": 182, + "241": 183, + "242": 183, + "243": 183, + "244": 188, + "245": 188, + "246": 189, + "247": 190, "248": 191, "249": 192, "250": 193, "251": 194, - "252": 194, - "253": 195, - "254": 196, + "252": 195, + "253": 196, + "254": 197, "255": 197, - "256": 198, - "257": 199, - "258": 200, - "259": 200, - "260": 200, - "261": 205, - "262": 205, - "263": 206, - "264": 207, - "265": 207, - "266": 207, - "267": 207, - "268": 208, - "269": 209, - "270": 210, - "271": 210, - "272": 214, - "273": 214, - "274": 215, - "275": 216, - "276": 217, - "277": 218, - "278": 218, - "279": 219, - "280": 224, - "281": 224, - "282": 225, - "283": 225, - "284": 226, - "285": 226, - "286": 226, - "287": 227, - "288": 230, - "289": 230, - "290": 231, - "291": 232, - "292": 233, - "293": 233, - "294": 234, - "295": 235, - "296": 236, - "297": 237, - "298": 238, - "299": 239, - "300": 240, - "301": 240, - "302": 240, - "303": 241, - "304": 241, + "256": 197, + "257": 198, + "258": 199, + "259": 199, + "260": 199, + "261": 200, + "262": 201, + "263": 201, + "264": 202, + "265": 203, + "266": 204, + "267": 204, + "268": 205, + "269": 206, + "270": 207, + "271": 208, + "272": 209, + "273": 210, + "274": 210, + "275": 210, + "276": 215, + "277": 215, + "278": 216, + "279": 217, + "280": 217, + "281": 217, + "282": 217, + "283": 218, + "284": 219, + "285": 220, + "286": 220, + "287": 224, + "288": 224, + "289": 225, + "290": 226, + "291": 227, + "292": 228, + "293": 228, + "294": 229, + "295": 234, + "296": 234, + "297": 235, + "298": 235, + "299": 236, + "300": 236, + "301": 236, + "302": 237, + "303": 240, + "304": 240, "305": 241, "306": 242, - "307": 242, - "308": 242, - "309": 243, - "310": 243, - "311": 243, - "312": 244, - "313": 244, - "314": 244, - "315": 245, - "316": 246, - "317": 249, - "318": 249, - "319": 249, - "320": 253, - "321": 253, - "322": 253, - "323": 254, - "324": 254, - "325": 255, - "326": 256, - "327": 256, - "328": 257, - "329": 258, - "330": 258, - "331": 262, - "332": 263, - "333": 264, - "334": 264, - "335": 265, - "336": 265, - "337": 266, - "338": 267, - "339": 267, - "340": 268, - "341": 268, - "342": 269, - "343": 269, - "344": 270, - "345": 271, - "346": 271, - "347": 272, - "348": 272, - "349": 273, - "350": 273, - "351": 274, - "352": 275, - "353": 275, - "354": 276, - "355": 276, - "356": 277, - "357": 277, + "307": 243, + "308": 243, + "309": 244, + "310": 245, + "311": 246, + "312": 247, + "313": 248, + "314": 249, + "315": 250, + "316": 250, + "317": 250, + "318": 251, + "319": 251, + "320": 251, + "321": 252, + "322": 252, + "323": 252, + "324": 253, + "325": 253, + "326": 253, + "327": 254, + "328": 254, + "329": 254, + "330": 255, + "331": 256, + "332": 259, + "333": 259, + "334": 259, + "335": 263, + "336": 263, + "337": 263, + "338": 264, + "339": 264, + "340": 265, + "341": 266, + "342": 266, + "343": 267, + "344": 268, + "345": 268, + "346": 272, + "347": 273, + "348": 274, + "349": 275, + "350": 275, + "351": 276, + "352": 276, + "353": 276, + "354": 277, + "355": 277, + "356": 278, + "357": 278, "358": 278, "359": 279, "360": 279, "361": 280, - "362": 280, - "363": 281, - "364": 282, + "362": 281, + "363": 282, + "364": 283, "365": 283, - "366": 284, + "366": 283, "367": 284, - "368": 284, - "369": 285, + "368": 285, + "369": 286, "370": 286, - "371": 287, - "372": 288, - "373": 289, + "371": 286, + "372": 287, + "373": 288, "374": 289, - "375": 290, - "376": 291, - "377": 292, - "378": 293, - "379": 293, - "380": 293, - "381": 294, - "382": 294, - "383": 295, - "384": 295, - "385": 296, - "386": 297, - "387": 298, - "388": 298, - "389": 299, - "390": 299, - "391": 300, - "392": 300, - "393": 301, - "394": 302, - "395": 302, - "396": 306, - "397": 306, - "398": 307, - "399": 311, - "400": 311, - "401": 312, - "402": 313, - "403": 314, - "404": 315, - "405": 315, - "406": 316, - "407": 321, - "408": 321, + "375": 289, + "376": 293, + "377": 293, + "378": 294, + "379": 298, + "380": 298, + "381": 299, + "382": 300, + "383": 301, + "384": 302, + "385": 302, + "386": 303, + "387": 308, + "388": 308, + "389": 309, + "390": 309, + "391": 309, + "392": 310, + "393": 310, + "394": 311, + "395": 312, + "396": 312, + "397": 313, + "398": 314, + "399": 315, + "400": 315, + "401": 315, + "402": 320, + "403": 320, + "404": 321, + "405": 321, + "406": 321, + "407": 322, + "408": 322, "409": 322, - "410": 322, - "411": 322, - "412": 323, - "413": 323, - "414": 324, - "415": 325, - "416": 325, - "417": 326, - "418": 327, - "419": 328, - "420": 328, - "421": 328, - "422": 333, - "423": 333, - "424": 334, - "425": 334, - "426": 334, - "427": 335, - "428": 335, - "429": 335, - "430": 340, - "431": 340, - "432": 341, - "433": 341, - "434": 342, - "435": 343, - "436": 344, - "437": 344, - "438": 344, - "439": 347, - "440": 350, + "410": 327, + "411": 327, + "412": 328, + "413": 328, + "414": 329, + "415": 330, + "416": 331, + "417": 331, + "418": 331, + "419": 334, + "420": 337, + "421": 337, + "422": 338, + "423": 339, + "424": 340, + "425": 340, + "426": 341, + "427": 342, + "428": 343, + "429": 344, + "430": 345, + "431": 346, + "432": 347, + "433": 347, + "434": 347, + "435": 348, + "436": 348, + "437": 348, + "438": 349, + "439": 349, + "440": 349, "441": 350, - "442": 351, - "443": 352, - "444": 353, - "445": 353, - "446": 354, + "442": 350, + "443": 350, + "444": 351, + "445": 352, + "446": 355, "447": 355, - "448": 356, - "449": 357, - "450": 358, + "448": 355, + "449": 359, + "450": 359, "451": 359, "452": 360, "453": 360, - "454": 360, - "455": 361, - "456": 361, - "457": 361, - "458": 362, - "459": 362, - "460": 362, - "461": 363, - "462": 363, - "463": 363, - "464": 364, - "465": 365, - "466": 368, - "467": 368, - "468": 368, - "469": 372, - "470": 372, - "471": 372, - "472": 373, - "473": 373, - "474": 374, - "475": 375, - "476": 375, - "477": 376, - "478": 377, - "479": 377, - "480": 381, - "481": 382, - "482": 383, - "483": 383, - "484": 384, - "485": 384, - "486": 385, - "487": 386, - "488": 386, - "489": 387, - "490": 387, - "491": 388, - "492": 388, - "493": 389, - "494": 390, - "495": 390, - "496": 391, - "497": 391, - "498": 392, - "499": 392, - "500": 393, - "501": 394, - "502": 394, - "503": 395, - "504": 395, - "505": 396, - "506": 396, - "507": 397, - "508": 398, - "509": 398, - "510": 399, - "511": 399, - "512": 400, - "513": 401, - "514": 402, - "515": 403, - "516": 403, - "517": 403, - "518": 404, - "519": 405, - "520": 406, - "521": 407, - "522": 408, - "523": 408, - "524": 409, - "525": 410, - "526": 411, - "527": 412, - "528": 412, - "529": 412, - "530": 413, - "531": 413, - "532": 414, - "533": 414, - "534": 415, - "535": 416, - "536": 417, - "537": 417, - "538": 418, - "539": 418, - "540": 419, - "541": 419, - "542": 420, - "543": 421, - "544": 421, - "545": 425, - "546": 425, - "547": 426, - "548": 430, - "549": 430, - "550": 431, - "551": 431, - "552": 431, - "553": 432, - "554": 435, - "555": 435, - "556": 436, - "557": 437, - "558": 438, - "559": 438, - "560": 439, - "561": 440, + "454": 361, + "455": 362, + "456": 362, + "457": 363, + "458": 364, + "459": 364, + "460": 368, + "461": 369, + "462": 370, + "463": 371, + "464": 371, + "465": 372, + "466": 372, + "467": 372, + "468": 373, + "469": 373, + "470": 374, + "471": 374, + "472": 374, + "473": 375, + "474": 375, + "475": 376, + "476": 377, + "477": 378, + "478": 379, + "479": 379, + "480": 379, + "481": 380, + "482": 381, + "483": 382, + "484": 382, + "485": 382, + "486": 383, + "487": 384, + "488": 385, + "489": 385, + "490": 389, + "491": 389, + "492": 390, + "493": 394, + "494": 394, + "495": 395, + "496": 395, + "497": 395, + "498": 396, + "499": 399, + "500": 399, + "501": 400, + "502": 401, + "503": 402, + "504": 402, + "505": 403, + "506": 404, + "507": 405, + "508": 406, + "509": 407, + "510": 408, + "511": 408, + "512": 409, + "513": 409, + "514": 409, + "515": 410, + "516": 411, + "517": 411, + "518": 411, + "519": 412, + "520": 413, + "521": 413, + "522": 413, + "523": 414, + "524": 414, + "525": 414, + "526": 415, + "527": 415, + "528": 415, + "529": 416, + "530": 416, + "531": 416, + "532": 417, + "533": 418, + "534": 421, + "535": 421, + "536": 421, + "537": 425, + "538": 425, + "539": 425, + "540": 426, + "541": 426, + "542": 427, + "543": 428, + "544": 428, + "545": 429, + "546": 430, + "547": 430, + "548": 434, + "549": 435, + "550": 436, + "551": 437, + "552": 437, + "553": 438, + "554": 438, + "555": 438, + "556": 439, + "557": 439, + "558": 440, + "559": 440, + "560": 440, + "561": 441, "562": 441, "563": 442, "564": 443, "565": 444, - "566": 444, + "566": 445, "567": 445, "568": 445, - "569": 445, - "570": 446, - "571": 447, - "572": 447, - "573": 447, - "574": 448, - "575": 449, - "576": 449, - "577": 449, - "578": 450, - "579": 450, - "580": 450, - "581": 451, - "582": 451, - "583": 451, - "584": 452, - "585": 452, - "586": 452, - "587": 453, - "588": 454, - "589": 457, - "590": 457, - "591": 457, - "592": 461, - "593": 461, - "594": 461, - "595": 462, - "596": 462, - "597": 463, - "598": 464, - "599": 464, - "600": 465, - "601": 466, - "602": 466, - "603": 470, - "604": 471, - "605": 472, - "606": 472, - "607": 473, - "608": 473, - "609": 474, - "610": 475, - "611": 475, - "612": 476, - "613": 476, - "614": 477, - "615": 477, - "616": 478, - "617": 479, - "618": 479, - "619": 480, - "620": 480, - "621": 481, - "622": 481, - "623": 482, - "624": 483, - "625": 483, - "626": 484, - "627": 484, - "628": 485, - "629": 485, - "630": 486, - "631": 487, - "632": 487, - "633": 488, - "634": 488, - "635": 489, - "636": 490, - "637": 491, - "638": 492, - "639": 492, - "640": 492, - "641": 493, - "642": 494, - "643": 495, - "644": 496, - "645": 497, - "646": 497, - "647": 498, - "648": 499, - "649": 500, - "650": 501, - "651": 501, - "652": 501, - "653": 502, - "654": 502, - "655": 503, - "656": 503, - "657": 504, - "658": 505, - "659": 506, - "660": 506, - "661": 507, - "662": 507, - "663": 508, - "664": 508, - "665": 509, - "666": 510, - "667": 510, - "668": 514, - "669": 514, - "670": 515, - "671": 516, - "672": 517, - "673": 518, - "674": 519, - "675": 520, - "676": 521, - "677": 522, - "678": 522, - "679": 522, - "680": 523, - "681": 523, - "682": 524, - "683": 525, - "684": 526, - "685": 527, - "686": 528, - "687": 528, - "688": 529, - "689": 530, - "690": 531, - "691": 532, - "692": 533, - "693": 534, - "694": 534, - "695": 535, - "696": 535, - "697": 536, - "698": 537, - "699": 538, - "700": 539, - "701": 539, - "702": 540, - "703": 541, - "704": 541, - "705": 542, - "706": 543, - "707": 544, - "708": 545, - "709": 546, - "710": 546, - "711": 547, - "712": 547, - "713": 548, - "714": 549, - "715": 550, - "716": 551, - "717": 552, - "718": 553, - "719": 554, - "720": 555, - "721": 556, - "722": 557, - "723": 557, - "724": 557, - "725": 558, - "726": 558, - "727": 559, - "728": 560, - "729": 561, - "730": 561, - "731": 562, - "732": 562, - "733": 563, - "734": 564, - "735": 565, - "736": 566, - "737": 567, - "738": 568, - "739": 568, - "740": 569, - "741": 570, - "742": 571, - "743": 572, - "744": 573, - "745": 574, - "746": 574, - "747": 578, - "748": 578, - "749": 579, - "750": 580, - "751": 581, - "752": 582, - "753": 583, - "754": 584, - "755": 585, - "756": 586, - "757": 587, - "758": 587, - "759": 588, - "760": 589, - "761": 593, - "762": 593, - "763": 594, - "764": 594, - "765": 594, - "766": 595, - "767": 598, - "768": 598, - "769": 599, - "770": 599, - "771": 599, - "772": 600, - "773": 600, - "774": 601, - "775": 602, - "776": 603, - "777": 603, - "778": 603, - "779": 606, - "780": 606, - "781": 606, - "782": 606, - "783": 606, - "784": 606, - "785": 607, - "786": 607, - "787": 607, - "788": 607, - "789": 607, - "790": 607, - "791": 608, - "792": 608, - "793": 608, - "794": 608, - "795": 608, - "796": 608, - "797": 609, - "798": 609, - "799": 609, - "800": 609, - "801": 609, - "802": 609, - "803": 610, - "804": 610, - "805": 610, - "806": 611 + "569": 446, + "570": 447, + "571": 448, + "572": 448, + "573": 448, + "574": 449, + "575": 450, + "576": 451, + "577": 451, + "578": 455, + "579": 455, + "580": 456, + "581": 457, + "582": 458, + "583": 459, + "584": 460, + "585": 461, + "586": 462, + "587": 463, + "588": 463, + "589": 463, + "590": 464, + "591": 464, + "592": 465, + "593": 466, + "594": 467, + "595": 468, + "596": 469, + "597": 469, + "598": 470, + "599": 471, + "600": 472, + "601": 473, + "602": 474, + "603": 475, + "604": 475, + "605": 476, + "606": 476, + "607": 477, + "608": 478, + "609": 479, + "610": 480, + "611": 480, + "612": 481, + "613": 482, + "614": 482, + "615": 483, + "616": 484, + "617": 485, + "618": 486, + "619": 487, + "620": 487, + "621": 488, + "622": 488, + "623": 489, + "624": 490, + "625": 491, + "626": 492, + "627": 493, + "628": 494, + "629": 495, + "630": 496, + "631": 497, + "632": 498, + "633": 498, + "634": 498, + "635": 499, + "636": 499, + "637": 500, + "638": 501, + "639": 502, + "640": 502, + "641": 503, + "642": 503, + "643": 504, + "644": 505, + "645": 506, + "646": 507, + "647": 508, + "648": 509, + "649": 509, + "650": 510, + "651": 511, + "652": 512, + "653": 513, + "654": 514, + "655": 515, + "656": 515, + "657": 519, + "658": 519, + "659": 520, + "660": 521, + "661": 522, + "662": 523, + "663": 524, + "664": 525, + "665": 526, + "666": 527, + "667": 528, + "668": 528, + "669": 529, + "670": 530, + "671": 534, + "672": 534, + "673": 535, + "674": 535, + "675": 535, + "676": 536, + "677": 539, + "678": 539, + "679": 540, + "680": 540, + "681": 540, + "682": 541, + "683": 541, + "684": 542, + "685": 543, + "686": 544, + "687": 544, + "688": 544, + "689": 547, + "690": 547, + "691": 547, + "692": 547, + "693": 547, + "694": 547, + "695": 548, + "696": 548, + "697": 548, + "698": 548, + "699": 548, + "700": 548, + "701": 549, + "702": 549, + "703": 549, + "704": 549, + "705": 549, + "706": 549, + "707": 550, + "708": 550, + "709": 550, + "710": 550, + "711": 550, + "712": 550, + "713": 551, + "714": 551, + "715": 551, + "716": 552 } \ No newline at end of file diff --git a/examples/auction/tealscript_artifacts/Auction.json b/examples/auction/tealscript_artifacts/Auction.json index ebde8e758..e6091c9b2 100644 --- a/examples/auction/tealscript_artifacts/Auction.json +++ b/examples/auction/tealscript_artifacts/Auction.json @@ -1 +1,173 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{"highestBidder":{"type":"bytes","key":"highestBidder"},"auctionEnd":{"type":"uint64","key":"auctionEnd"},"highestBid":{"type":"uint64","key":"highestBid"},"asaAmt":{"type":"uint64","key":"asaAmt"},"asa":{"type":"uint64","key":"asa"}},"reserved":{}}},"state":{"global":{"num_byte_slices":1,"num_uints":4},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxNwoJLy8gdGhpcy5hdWN0aW9uRW5kLnB1dCgwKQoJYnl0ZSAiYXVjdGlvbkVuZCIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjE4CgkvLyB0aGlzLmhpZ2hlc3RCaWQucHV0KDApCglieXRlICJoaWdoZXN0QmlkIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTkKCS8vIHRoaXMuYXNhQW10LnB1dCgwKQoJYnl0ZSAiYXNhQW10IgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MjAKCS8vIHRoaXMuYXNhLnB1dChBc3NldC56ZXJvSW5kZXgpCglieXRlICJhc2EiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoyMwoJLy8gdGhpcy5oaWdoZXN0QmlkZGVyLnB1dChnbG9iYWxzLnplcm9BZGRyZXNzKQoJYnl0ZSAiaGlnaGVzdEJpZGRlciIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX29wdEludG9Bc3NldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIG9wdEludG9Bc3NldAoJaW50IDEKCXJldHVybgoKb3B0SW50b0Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gT25seSBhbGxvdyBhcHAgY3JlYXRvciB0byBvcHQgdGhlIGFwcCBhY2NvdW50IGludG8gYSBBU0EKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjI4CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzKQoJdHhuIFNlbmRlcgoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gVmVyaWZ5IGEgQVNBIGhhc24ndCBhbHJlYWR5IGJlZW4gb3B0ZWQgaW50bwoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MzEKCS8vIGFzc2VydCh0aGlzLmFzYS5nZXQoKSA9PT0gQXNzZXQuemVyb0luZGV4KQoJYnl0ZSAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCgk9PQoJYXNzZXJ0CgoJLy8gU2F2ZSBBU0EgSUQgaW4gZ2xvYmFsIHN0YXRlCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozNAoJLy8gdGhpcy5hc2EucHV0KGFzc2V0KQoJYnl0ZSAiYXNhIgoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBhc3NldAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBTdWJtaXQgb3B0LWluIHRyYW5zYWN0aW9uOiAwIGFzc2V0IHRyYW5zZmVyIHRvIHNlbGYKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjM3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozOAoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozOQoJLy8geGZlckFzc2V0OiBhc3NldAoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBhc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo0MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NDEKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgphYmlfcm91dGVfc3RhcnRBdWN0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgc3RhcnRBdWN0aW9uCglpbnQgMQoJcmV0dXJuCgpzdGFydEF1Y3Rpb246Cglwcm90byAzIDAKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo0NgoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gZ2xvYmFscy5jcmVhdG9yQWRkcmVzcykKCXR4biBTZW5kZXIKCWdsb2JhbCBDcmVhdG9yQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vIEVuc3VyZSB0aGUgYXVjdGlvbiBoYXNuJ3QgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjQ5CgkvLyBhc3NlcnQodGhpcy5hdWN0aW9uRW5kLmdldCgpID09PSAwKQoJYnl0ZSAiYXVjdGlvbkVuZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJPT0KCWFzc2VydAoKCS8vIFZlcmlmeSBheGZlcgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NTIKCS8vIGFzc2VydChheGZlci5hc3NldFJlY2VpdmVyID09PSB0aGlzLmFwcC5hZGRyZXNzKQoJZnJhbWVfZGlnIC0zIC8vIGF4ZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CgoJLy8gU2V0IGdsb2JhbCBzdGF0ZQoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NTUKCS8vIHRoaXMuYXNhQW10LnB1dChheGZlci5hc3NldEFtb3VudCkKCWJ5dGUgImFzYUFtdCIKCWZyYW1lX2RpZyAtMyAvLyBheGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU2CgkvLyB0aGlzLmF1Y3Rpb25FbmQucHV0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wICsgbGVuZ3RoKQoJYnl0ZSAiYXVjdGlvbkVuZCIKCWdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKCWZyYW1lX2RpZyAtMiAvLyBsZW5ndGg6IHVpbnQ2NAoJKwoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo1NwoJLy8gdGhpcy5oaWdoZXN0QmlkLnB1dChzdGFydGluZ1ByaWNlKQoJYnl0ZSAiaGlnaGVzdEJpZCIKCWZyYW1lX2RpZyAtMSAvLyBzdGFydGluZ1ByaWNlOiB1aW50NjQKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCnBheToKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjYxCgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjQKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjYKCS8vIGFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTIgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjcKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgphYmlfcm91dGVfYmlkOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIGJpZAoJaW50IDEKCXJldHVybgoKYmlkOgoJcHJvdG8gMiAwCgoJLy8gRW5zdXJlIGF1Y3Rpb24gaGFzbid0IGVuZGVkCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3NAoJLy8gYXNzZXJ0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5hdWN0aW9uRW5kLmdldCgpKQoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJYnl0ZSAiYXVjdGlvbkVuZCIKCWFwcF9nbG9iYWxfZ2V0Cgk8Cglhc3NlcnQKCgkvLyBWZXJpZnkgcGF5bWVudCB0cmFuc2FjdGlvbgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NzcKCS8vIGFzc2VydChwYXltZW50LmFtb3VudCA+IHRoaXMuaGlnaGVzdEJpZC5nZXQoKSkKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBwYXkKCWd0eG5zIEFtb3VudAoJYnl0ZSAiaGlnaGVzdEJpZCIKCWFwcF9nbG9iYWxfZ2V0Cgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3OAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gcGF5bWVudC5zZW5kZXIpCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogcGF5CglndHhucyBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyBSZXR1cm4gcHJldmlvdXMgYmlkIGlmIHRoZXJlIHdhcyBvbmUKCS8vIGlmMF9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjgxCgkvLyB0aGlzLmhpZ2hlc3RCaWRkZXIuZ2V0KCkgIT09IGdsb2JhbHMuemVyb0FkZHJlc3MKCWJ5dGUgImhpZ2hlc3RCaWRkZXIiCglhcHBfZ2xvYmFsX2dldAoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJYnogaWYwX2VuZAoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4MgoJLy8gdGhpcy5wYXkodGhpcy5oaWdoZXN0QmlkZGVyLmdldCgpLCB0aGlzLmhpZ2hlc3RCaWQuZ2V0KCkpCglieXRlICJoaWdoZXN0QmlkIgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgImhpZ2hlc3RCaWRkZXIiCglhcHBfZ2xvYmFsX2dldAoJY2FsbHN1YiBwYXkKCmlmMF9lbmQ6CgkvLyBTZXQgZ2xvYmFsIHN0YXRlCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4NgoJLy8gdGhpcy5oaWdoZXN0QmlkLnB1dChwYXltZW50LmFtb3VudCkKCWJ5dGUgImhpZ2hlc3RCaWQiCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogcGF5CglndHhucyBBbW91bnQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6ODcKCS8vIHRoaXMuaGlnaGVzdEJpZGRlci5wdXQocGF5bWVudC5zZW5kZXIpCglieXRlICJoaWdoZXN0QmlkZGVyIgoJZnJhbWVfZGlnIC0xIC8vIHBheW1lbnQ6IHBheQoJZ3R4bnMgU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgphYmlfcm91dGVfY2xhaW1CaWQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY2xhaW1CaWQKCWludCAxCglyZXR1cm4KCmNsYWltQmlkOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTMKCS8vIHRoaXMucGF5KGdsb2JhbHMuY3JlYXRvckFkZHJlc3MsIHRoaXMuaGlnaGVzdEJpZC5nZXQoKSkKCWJ5dGUgImhpZ2hlc3RCaWQiCglhcHBfZ2xvYmFsX2dldAoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgljYWxsc3ViIHBheQoJcmV0c3ViCgphYmlfcm91dGVfY2xhaW1fYXNzZXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBc3NldHMKCWNhbGxzdWIgY2xhaW1fYXNzZXQKCWludCAxCglyZXR1cm4KCmNsYWltX2Fzc2V0OgoJcHJvdG8gMiAwCgoJLy8gU2VuZCBBU0EgdG8gaGlnaGVzdCBiaWRkZXIKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjEwMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTAxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmhpZ2hlc3RCaWRkZXIuZ2V0KCkKCWJ5dGUgImhpZ2hlc3RCaWRkZXIiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTAyCgkvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNhLmdldCgpCglieXRlICJhc2EiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDMKCS8vIGFzc2V0QW1vdW50OiB0aGlzLmFzYUFtdC5nZXQoKQoJYnl0ZSAiYXNhQW10IgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDQKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTA1CgkvLyBhc3NldENsb3NlVG86IGFzc2V0Q3JlYXRvcgoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0Q3JlYXRvcjogYWNjb3VudAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCWl0eG5fc3VibWl0CglyZXRzdWIKCmJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGRlbGV0ZQoJaW50IDEKCXJldHVybgoKZGVsZXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTExCgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTEyCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExMwoJLy8gcmVjZWl2ZXI6IGdsb2JhbHMuY3JlYXRvckFkZHJlc3MKCWdsb2JhbCBDcmVhdG9yQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExNAoJLy8gY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy5jcmVhdG9yQWRkcmVzcwoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCglpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMTUKCS8vIGFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQW1vdW50CglpdHhuX3N1Ym1pdAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb24KCnJvdXRlX2FiaToKCW1ldGhvZCAib3B0SW50b0Fzc2V0KGFzc2V0KXZvaWQiCgltZXRob2QgInN0YXJ0QXVjdGlvbih1aW50NjQsdWludDY0LGF4ZmVyKXZvaWQiCgltZXRob2QgImJpZChwYXksYWNjb3VudCl2b2lkIgoJbWV0aG9kICJjbGFpbUJpZCgpdm9pZCIKCW1ldGhvZCAiY2xhaW1fYXNzZXQoYXNzZXQsYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX29wdEludG9Bc3NldCBhYmlfcm91dGVfc3RhcnRBdWN0aW9uIGFiaV9yb3V0ZV9iaWQgYWJpX3JvdXRlX2NsYWltQmlkIGFiaV9yb3V0ZV9jbGFpbV9hc3NldA==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"Auction","desc":"","methods":[{"name":"optIntoAsset","args":[{"name":"asset","type":"asset","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"startAuction","args":[{"name":"startingPrice","type":"uint64","desc":""},{"name":"length","type":"uint64","desc":""},{"name":"axfer","type":"axfer","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"bid","args":[{"name":"payment","type":"pay","desc":""},{"name":"previousBidder","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"claimBid","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"claim_asset","args":[{"name":"asset","type":"asset","desc":""},{"name":"assetCreator","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "optIntoAsset(asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "startAuction(uint64,uint64,axfer)void": { + "call_config": { + "no_op": "CALL" + } + }, + "bid(pay,account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "claimBid()void": { + "call_config": { + "no_op": "CALL" + } + }, + "claim_asset(asset,account)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "delete_application": "CALL", + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "highestBidder": { + "type": "bytes", + "key": "highestBidder" + }, + "auctionEnd": { + "type": "uint64", + "key": "auctionEnd" + }, + "highestBid": { + "type": "uint64", + "key": "highestBid" + }, + "asaAmt": { + "type": "uint64", + "key": "asaAmt" + }, + "asa": { + "type": "uint64", + "key": "asa" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 4 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxNwoJLy8gdGhpcy5hdWN0aW9uRW5kLnB1dCgwKQoJYnl0ZSAiYXVjdGlvbkVuZCIKCWludCAwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjE4CgkvLyB0aGlzLmhpZ2hlc3RCaWQucHV0KDApCglieXRlICJoaWdoZXN0QmlkIgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTkKCS8vIHRoaXMuYXNhQW10LnB1dCgwKQoJYnl0ZSAiYXNhQW10IgoJaW50IDAKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MjAKCS8vIHRoaXMuYXNhLnB1dChBc3NldC56ZXJvSW5kZXgpCglieXRlICJhc2EiCglpbnQgMAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoyMwoJLy8gdGhpcy5oaWdoZXN0QmlkZGVyLnB1dChnbG9iYWxzLnplcm9BZGRyZXNzKQoJYnl0ZSAiaGlnaGVzdEJpZGRlciIKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX29wdEludG9Bc3NldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIG9wdEludG9Bc3NldAoJaW50IDEKCXJldHVybgoKb3B0SW50b0Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gT25seSBhbGxvdyBhcHAgY3JlYXRvciB0byBvcHQgdGhlIGFwcCBhY2NvdW50IGludG8gYSBBU0EKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjI4CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSBnbG9iYWxzLmNyZWF0b3JBZGRyZXNzKQoJdHhuIFNlbmRlcgoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gVmVyaWZ5IGEgQVNBIGhhc24ndCBhbHJlYWR5IGJlZW4gb3B0ZWQgaW50bwoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MzEKCS8vIGFzc2VydCh0aGlzLmFzYS5nZXQoKSA9PT0gQXNzZXQuemVyb0luZGV4KQoJYnl0ZSAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCgk9PQoJYXNzZXJ0CgoJLy8gU2F2ZSBBU0EgSUQgaW4gZ2xvYmFsIHN0YXRlCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozNAoJLy8gdGhpcy5hc2EucHV0KGFzc2V0KQoJYnl0ZSAiYXNhIgoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBhc3NldAoJYXBwX2dsb2JhbF9wdXQKCgkvLyBTdWJtaXQgb3B0LWluIHRyYW5zYWN0aW9uOiAwIGFzc2V0IHRyYW5zZmVyIHRvIHNlbGYKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjM3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozOAoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czozOQoJLy8geGZlckFzc2V0OiBhc3NldAoJZnJhbWVfZGlnIC0xIC8vIGFzc2V0OiBhc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo0MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NDEKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgphYmlfcm91dGVfc3RhcnRBdWN0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgc3RhcnRBdWN0aW9uCglpbnQgMQoJcmV0dXJuCgpzdGFydEF1Y3Rpb246Cglwcm90byAzIDAKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo0NgoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gZ2xvYmFscy5jcmVhdG9yQWRkcmVzcykKCXR4biBTZW5kZXIKCWdsb2JhbCBDcmVhdG9yQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vIEVuc3VyZSB0aGUgYXVjdGlvbiBoYXNuJ3QgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjQ5CgkvLyBhc3NlcnQodGhpcy5hdWN0aW9uRW5kLmdldCgpID09PSAwKQoJYnl0ZSAiYXVjdGlvbkVuZCIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMAoJPT0KCWFzc2VydAoKCS8vIFZlcmlmeSBheGZlcgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NTIKCS8vIGFzc2VydChheGZlci5hc3NldFJlY2VpdmVyID09PSB0aGlzLmFwcC5hZGRyZXNzKQoJZnJhbWVfZGlnIC0zIC8vIGF4ZmVyOiBheGZlcgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CgoJLy8gU2V0IGdsb2JhbCBzdGF0ZQoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NTUKCS8vIHRoaXMuYXNhQW10LnB1dChheGZlci5hc3NldEFtb3VudCkKCWJ5dGUgImFzYUFtdCIKCWZyYW1lX2RpZyAtMyAvLyBheGZlcjogYXhmZXIKCWd0eG5zIEFzc2V0QW1vdW50CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjU2CgkvLyB0aGlzLmF1Y3Rpb25FbmQucHV0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wICsgbGVuZ3RoKQoJYnl0ZSAiYXVjdGlvbkVuZCIKCWdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKCWZyYW1lX2RpZyAtMiAvLyBsZW5ndGg6IHVpbnQ2NAoJKwoJYXBwX2dsb2JhbF9wdXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo1NwoJLy8gdGhpcy5oaWdoZXN0QmlkLnB1dChzdGFydGluZ1ByaWNlKQoJYnl0ZSAiaGlnaGVzdEJpZCIKCWZyYW1lX2RpZyAtMSAvLyBzdGFydGluZ1ByaWNlOiB1aW50NjQKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCnBheToKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjYxCgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjQKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBhY2NvdW50CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjYKCS8vIGFtb3VudDogYW1vdW50CglmcmFtZV9kaWcgLTIgLy8gYW1vdW50OiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NjcKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgphYmlfcm91dGVfYmlkOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCgljYWxsc3ViIGJpZAoJaW50IDEKCXJldHVybgoKYmlkOgoJcHJvdG8gMiAwCgoJLy8gRW5zdXJlIGF1Y3Rpb24gaGFzbid0IGVuZGVkCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3NAoJLy8gYXNzZXJ0KGdsb2JhbHMubGF0ZXN0VGltZXN0YW1wIDwgdGhpcy5hdWN0aW9uRW5kLmdldCgpKQoJZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAoJYnl0ZSAiYXVjdGlvbkVuZCIKCWFwcF9nbG9iYWxfZ2V0Cgk8Cglhc3NlcnQKCgkvLyBWZXJpZnkgcGF5bWVudCB0cmFuc2FjdGlvbgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6NzcKCS8vIGFzc2VydChwYXltZW50LmFtb3VudCA+IHRoaXMuaGlnaGVzdEJpZC5nZXQoKSkKCWZyYW1lX2RpZyAtMSAvLyBwYXltZW50OiBwYXkKCWd0eG5zIEFtb3VudAoJYnl0ZSAiaGlnaGVzdEJpZCIKCWFwcF9nbG9iYWxfZ2V0Cgk+Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo3OAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gcGF5bWVudC5zZW5kZXIpCgl0eG4gU2VuZGVyCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogcGF5CglndHhucyBTZW5kZXIKCT09Cglhc3NlcnQKCgkvLyBSZXR1cm4gcHJldmlvdXMgYmlkIGlmIHRoZXJlIHdhcyBvbmUKCS8vIGlmMF9jb25kaXRpb24KCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjgxCgkvLyB0aGlzLmhpZ2hlc3RCaWRkZXIuZ2V0KCkgIT09IGdsb2JhbHMuemVyb0FkZHJlc3MKCWJ5dGUgImhpZ2hlc3RCaWRkZXIiCglhcHBfZ2xvYmFsX2dldAoJZ2xvYmFsIFplcm9BZGRyZXNzCgkhPQoJYnogaWYwX2VuZAoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4MgoJLy8gdGhpcy5wYXkodGhpcy5oaWdoZXN0QmlkZGVyLmdldCgpLCB0aGlzLmhpZ2hlc3RCaWQuZ2V0KCkpCglieXRlICJoaWdoZXN0QmlkIgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgImhpZ2hlc3RCaWRkZXIiCglhcHBfZ2xvYmFsX2dldAoJY2FsbHN1YiBwYXkKCmlmMF9lbmQ6CgkvLyBTZXQgZ2xvYmFsIHN0YXRlCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czo4NgoJLy8gdGhpcy5oaWdoZXN0QmlkLnB1dChwYXltZW50LmFtb3VudCkKCWJ5dGUgImhpZ2hlc3RCaWQiCglmcmFtZV9kaWcgLTEgLy8gcGF5bWVudDogcGF5CglndHhucyBBbW91bnQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6ODcKCS8vIHRoaXMuaGlnaGVzdEJpZGRlci5wdXQocGF5bWVudC5zZW5kZXIpCglieXRlICJoaWdoZXN0QmlkZGVyIgoJZnJhbWVfZGlnIC0xIC8vIHBheW1lbnQ6IHBheQoJZ3R4bnMgU2VuZGVyCglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgphYmlfcm91dGVfY2xhaW1CaWQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY2xhaW1CaWQKCWludCAxCglyZXR1cm4KCmNsYWltQmlkOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6OTMKCS8vIHRoaXMucGF5KGdsb2JhbHMuY3JlYXRvckFkZHJlc3MsIHRoaXMuaGlnaGVzdEJpZC5nZXQoKSkKCWJ5dGUgImhpZ2hlc3RCaWQiCglhcHBfZ2xvYmFsX2dldAoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCgljYWxsc3ViIHBheQoJcmV0c3ViCgphYmlfcm91dGVfY2xhaW1fYXNzZXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBc3NldHMKCWNhbGxzdWIgY2xhaW1fYXNzZXQKCWludCAxCglyZXR1cm4KCmNsYWltX2Fzc2V0OgoJcHJvdG8gMiAwCgoJLy8gU2VuZCBBU0EgdG8gaGlnaGVzdCBiaWRkZXIKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjEwMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTAxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmhpZ2hlc3RCaWRkZXIuZ2V0KCkKCWJ5dGUgImhpZ2hlc3RCaWRkZXIiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTAyCgkvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNhLmdldCgpCglieXRlICJhc2EiCglhcHBfZ2xvYmFsX2dldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDMKCS8vIGFzc2V0QW1vdW50OiB0aGlzLmFzYUFtdC5nZXQoKQoJYnl0ZSAiYXNhQW10IgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMDQKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTA1CgkvLyBhc3NldENsb3NlVG86IGFzc2V0Q3JlYXRvcgoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0Q3JlYXRvcjogYWNjb3VudAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCWl0eG5fc3VibWl0CglyZXRzdWIKCmJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGRlbGV0ZQoJaW50IDEKCXJldHVybgoKZGVsZXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTExCgkvLyBzZW5kUGF5bWVudCh7CglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvYXVjdGlvbi9hdWN0aW9uLmFsZ28udHM6MTEyCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExMwoJLy8gcmVjZWl2ZXI6IGdsb2JhbHMuY3JlYXRvckFkZHJlc3MKCWdsb2JhbCBDcmVhdG9yQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2F1Y3Rpb24vYXVjdGlvbi5hbGdvLnRzOjExNAoJLy8gY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy5jcmVhdG9yQWRkcmVzcwoJZ2xvYmFsIENyZWF0b3JBZGRyZXNzCglpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCgkvLyBleGFtcGxlcy9hdWN0aW9uL2F1Y3Rpb24uYWxnby50czoxMTUKCS8vIGFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQW1vdW50CglpdHhuX3N1Ym1pdAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb24KCnJvdXRlX2FiaToKCW1ldGhvZCAib3B0SW50b0Fzc2V0KGFzc2V0KXZvaWQiCgltZXRob2QgInN0YXJ0QXVjdGlvbih1aW50NjQsdWludDY0LGF4ZmVyKXZvaWQiCgltZXRob2QgImJpZChwYXksYWNjb3VudCl2b2lkIgoJbWV0aG9kICJjbGFpbUJpZCgpdm9pZCIKCW1ldGhvZCAiY2xhaW1fYXNzZXQoYXNzZXQsYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX29wdEludG9Bc3NldCBhYmlfcm91dGVfc3RhcnRBdWN0aW9uIGFiaV9yb3V0ZV9iaWQgYWJpX3JvdXRlX2NsYWltQmlkIGFiaV9yb3V0ZV9jbGFpbV9hc3NldA==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "Auction", + "desc": "", + "methods": [ + { + "name": "optIntoAsset", + "args": [ + { + "name": "asset", + "type": "asset", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "startAuction", + "args": [ + { + "name": "startingPrice", + "type": "uint64", + "desc": "" + }, + { + "name": "length", + "type": "uint64", + "desc": "" + }, + { + "name": "axfer", + "type": "axfer", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "bid", + "args": [ + { + "name": "payment", + "type": "pay", + "desc": "" + }, + { + "name": "previousBidder", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "claimBid", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "claim_asset", + "args": [ + { + "name": "asset", + "type": "asset", + "desc": "" + }, + { + "name": "assetCreator", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/calculator/artifacts/Calculator.json b/examples/calculator/artifacts/Calculator.json index a8db7bd6d..9cffd4e1e 100644 --- a/examples/calculator/artifacts/Calculator.json +++ b/examples/calculator/artifacts/Calculator.json @@ -1 +1,65 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKZ2V0U3VtOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6NgoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKwoJcmV0c3ViCgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTAKCS8vIHJldHVybiBhID49IGIgPyBhIC0gYiA6IGIgLSBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJPj0KCWJ6IHRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliIHRlcm5hcnkwX2VuZAoKdGVybmFyeTBfZmFsc2U6CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgktCgp0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV9kb01hdGg6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWV4dHJhY3QgMiAwCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGRvTWF0aAoJaW50IDEKCXJldHVybgoKZG9NYXRoOgoJcHJvdG8gNCAwCgoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTQKCS8vIHJlc3VsdDogbnVtYmVyCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9jYWxjdWxhdG9yL2NhbGN1bGF0b3IuYWxnby50czoxNgoJLy8gb3BlcmF0aW9uID09PSAnc3VtJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogYnl0ZXMKCWJ5dGUgInN1bSIKCT09CglieiBpZjBfZWxzZWlmMV9jb25kaXRpb24KCgkvLyBpZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTcKCS8vIHJlc3VsdCA9IHRoaXMuZ2V0U3VtKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldFN1bQoJZnJhbWVfYnVyeSAtNCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiBpZjBfZW5kCgppZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBleGFtcGxlcy9jYWxjdWxhdG9yL2NhbGN1bGF0b3IuYWxnby50czoxOAoJLy8gb3BlcmF0aW9uID09PSAnZGlmZmVyZW5jZScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IGJ5dGVzCglieXRlICJkaWZmZXJlbmNlIgoJPT0KCWJ6IGlmMF9lbHNlCgoJLy8gaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTkKCS8vIHJlc3VsdCA9IHRoaXMuZ2V0RGlmZmVyZW5jZShhLCBiKQoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJY2FsbHN1YiBnZXREaWZmZXJlbmNlCglmcmFtZV9idXJ5IC00IC8vIHJlc3VsdDogdWludDY0CgliIGlmMF9lbmQKCmlmMF9lbHNlOgoJZXJyIC8vICdJbnZhbGlkIG9wZXJhdGlvbicKCmlmMF9lbmQ6CgkvLyBleGFtcGxlcy9jYWxjdWxhdG9yL2NhbGN1bGF0b3IuYWxnby50czoyMgoJLy8gcmV0dXJuIHJlc3VsdDsKCWZyYW1lX2RpZyAtNCAvLyByZXN1bHQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9kb01hdGg=","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"Calculator","desc":"","methods":[{"name":"doMath","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""},{"name":"operation","type":"string","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "doMath(uint64,uint64,string)uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKZ2V0U3VtOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6NgoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKwoJcmV0c3ViCgpnZXREaWZmZXJlbmNlOgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTAKCS8vIHJldHVybiBhID49IGIgPyBhIC0gYiA6IGIgLSBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJPj0KCWJ6IHRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgktCgliIHRlcm5hcnkwX2VuZAoKdGVybmFyeTBfZmFsc2U6CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgktCgp0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV9kb01hdGg6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWV4dHJhY3QgMiAwCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGRvTWF0aAoJaW50IDEKCXJldHVybgoKZG9NYXRoOgoJcHJvdG8gNCAwCgoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTQKCS8vIHJlc3VsdDogbnVtYmVyCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9jYWxjdWxhdG9yL2NhbGN1bGF0b3IuYWxnby50czoxNgoJLy8gb3BlcmF0aW9uID09PSAnc3VtJwoJZnJhbWVfZGlnIC0zIC8vIG9wZXJhdGlvbjogYnl0ZXMKCWJ5dGUgInN1bSIKCT09CglieiBpZjBfZWxzZWlmMV9jb25kaXRpb24KCgkvLyBpZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTcKCS8vIHJlc3VsdCA9IHRoaXMuZ2V0U3VtKGEsIGIpCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CgljYWxsc3ViIGdldFN1bQoJZnJhbWVfYnVyeSAtNCAvLyByZXN1bHQ6IHVpbnQ2NAoJYiBpZjBfZW5kCgppZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBleGFtcGxlcy9jYWxjdWxhdG9yL2NhbGN1bGF0b3IuYWxnby50czoxOAoJLy8gb3BlcmF0aW9uID09PSAnZGlmZmVyZW5jZScKCWZyYW1lX2RpZyAtMyAvLyBvcGVyYXRpb246IGJ5dGVzCglieXRlICJkaWZmZXJlbmNlIgoJPT0KCWJ6IGlmMF9lbHNlCgoJLy8gaWYwX2Vsc2VpZjFfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvY2FsY3VsYXRvci9jYWxjdWxhdG9yLmFsZ28udHM6MTkKCS8vIHJlc3VsdCA9IHRoaXMuZ2V0RGlmZmVyZW5jZShhLCBiKQoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJY2FsbHN1YiBnZXREaWZmZXJlbmNlCglmcmFtZV9idXJ5IC00IC8vIHJlc3VsdDogdWludDY0CgliIGlmMF9lbmQKCmlmMF9lbHNlOgoJZXJyIC8vICdJbnZhbGlkIG9wZXJhdGlvbicKCmlmMF9lbmQ6CgkvLyBleGFtcGxlcy9jYWxjdWxhdG9yL2NhbGN1bGF0b3IuYWxnby50czoyMgoJLy8gcmV0dXJuIHJlc3VsdDsKCWZyYW1lX2RpZyAtNCAvLyByZXN1bHQ6IHVpbnQ2NAoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiZG9NYXRoKHVpbnQ2NCx1aW50NjQsc3RyaW5nKXVpbnQ2NCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9kb01hdGg=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "Calculator", + "desc": "", + "methods": [ + { + "name": "doMath", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + }, + { + "name": "operation", + "type": "string", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/itxns/artifacts/FactoryCaller.json b/examples/itxns/artifacts/FactoryCaller.json index 4892bc7bb..011b15a1d 100644 --- a/examples/itxns/artifacts/FactoryCaller.json +++ b/examples/itxns/artifacts/FactoryCaller.json @@ -1 +1,51 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX21pbnRBbmRHZXRBc3NldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIG1pbnRBbmRHZXRBc3NldAoJaW50IDEKCXJldHVybgoKbWludEFuZEdldEFzc2V0OgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozNAoJLy8gc2VuZEFwcENhbGwoewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM1CgkvLyBvbkNvbXBsZXRpb246ICdOb09wJwoJaW50IE5vT3AKCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozNgoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogdGhpcy5hcHAuY2xlYXJTdGF0ZVByb2dyYW0KCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcENsZWFyU3RhdGVQcm9ncmFtCglhc3NlcnQKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM4CgkvLyBhcHByb3ZhbFByb2dyYW06IE5GVEZhY3RvcnkKCWJ5dGUgYjY0IENDQUNBQUZDQUlneEdTSVNNUmdpRWhCRWlBQUNJME9LQUFDSk1Sa2lFakVZSWhNUVJEWWFBbGNDQURZYUFWY0NBSWdBQWlORGlnSUFzWUVEc2hDTC83SW1pLzZ5SlNPeUlpS3lJeUt5QWJPMFBCYUFCQlVmZkhWTVVMQ0pNUmtpRWpFWUloTVFSRFlhQWhmQUhEWWFBUmZBTUlnQUFpTkRpZ0lBc1lFRXNoQ0wvcklVSTdJU2kvK3lFU0t5QWJPSk1SdEFBQWN4R0NJU1FQOXNnQVRTQWt4emdBUklJV1p3TmhvQWpnTC9hditzCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQxCgkvLyBmYWN0b3J5QXBwID0gdGhpcy5pdHhuLmNyZWF0ZWRBcHBsaWNhdGlvbklECglpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECglmcmFtZV9idXJ5IC0xIC8vIGZhY3RvcnlBcHA6IGFwcGxpY2F0aW9uCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MwoJLy8gc2VuZFBheW1lbnQoewoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDQKCS8vIGFtb3VudDogMjAwXzAwMAoJaW50IDIwMF8wMDAKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0NQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQ2CgkvLyByZWNlaXZlcjogZmFjdG9yeUFwcC5hZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gZmFjdG9yeUFwcDogYXBwbGljYXRpb24KCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBSZWNlaXZlcgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQ5CgkvLyBjcmVhdGVkQXNzZXQgPSBzZW5kTWV0aG9kQ2FsbDxbc3RyaW5nLCBzdHJpbmddLCBBc3NldD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiY3JlYXRlTkZUKHN0cmluZyxzdHJpbmcpdWludDY0IgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUwCgkvLyBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwCglmcmFtZV9kaWcgLTEgLy8gZmFjdG9yeUFwcDogYXBwbGljYXRpb24KCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTIKCS8vIG1ldGhvZEFyZ3M6IFsnTXkgTkZUJywgJ01ORlQnXQoJYnl0ZSAiTXkgTkZUIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWJ5dGUgIk1ORlQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTMKCS8vIG9uQ29tcGxldGlvbjogJ05vT3AnCglpbnQgTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjU0CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJYnRvaQoJZnJhbWVfYnVyeSAtMiAvLyBjcmVhdGVkQXNzZXQ6IGFzc2V0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1OAoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjU5CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjYwCgkvLyB4ZmVyQXNzZXQ6IGNyZWF0ZWRBc3NldAoJZnJhbWVfZGlnIC0yIC8vIGNyZWF0ZWRBc3NldDogYXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo2MQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo2NAoJLy8gc2VuZE1ldGhvZENhbGw8W0Fzc2V0LCBBY2NvdW50XSwgdm9pZD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAidHJhbnNmZXJORlQoYXNzZXQsYWNjb3VudCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjY1CgkvLyBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwCglmcmFtZV9kaWcgLTEgLy8gZmFjdG9yeUFwcDogYXBwbGljYXRpb24KCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NjcKCS8vIG1ldGhvZEFyZ3M6IFtjcmVhdGVkQXNzZXQsIHRoaXMuYXBwLmFkZHJlc3NdCglmcmFtZV9kaWcgLTIgLy8gY3JlYXRlZEFzc2V0OiBhc3NldAoJaXR4bl9maWVsZCBBc3NldHMKCWludCAwCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFjY291bnRzCglpbnQgMQoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjY4CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NjkKCS8vIG9uQ29tcGxldGlvbjogJ05vT3AnCglpbnQgTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo3MgoJLy8gcmV0dXJuIGNyZWF0ZWRBc3NldDsKCWZyYW1lX2RpZyAtMiAvLyBjcmVhdGVkQXNzZXQ6IGFzc2V0CglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgIm1pbnRBbmRHZXRBc3NldCgpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX21pbnRBbmRHZXRBc3NldA==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"FactoryCaller","desc":"","methods":[{"name":"mintAndGetAsset","args":[],"desc":"","returns":{"type":"uint64","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "mintAndGetAsset()uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX21pbnRBbmRHZXRBc3NldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIG1pbnRBbmRHZXRBc3NldAoJaW50IDEKCXJldHVybgoKbWludEFuZEdldEFzc2V0OgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozNAoJLy8gc2VuZEFwcENhbGwoewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM1CgkvLyBvbkNvbXBsZXRpb246ICdOb09wJwoJaW50IE5vT3AKCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czozNgoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogdGhpcy5hcHAuY2xlYXJTdGF0ZVByb2dyYW0KCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcENsZWFyU3RhdGVQcm9ncmFtCglhc3NlcnQKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjM4CgkvLyBhcHByb3ZhbFByb2dyYW06IE5GVEZhY3RvcnkKCWJ5dGUgYjY0IENDQUNBQUZDQUlneEdTSVNNUmdpRWhCRWlBQUNJME9LQUFDSk1Sa2lFakVZSWhNUVJEWWFBbGNDQURZYUFWY0NBSWdBQWlORGlnSUFzWUVEc2hDTC83SW1pLzZ5SlNPeUlpS3lJeUt5QWJPMFBCYUFCQlVmZkhWTVVMQ0pNUmtpRWpFWUloTVFSRFlhQWhmQUhEWWFBUmZBTUlnQUFpTkRpZ0lBc1lFRXNoQ0wvcklVSTdJU2kvK3lFU0t5QWJPSk1SdEFBQWN4R0NJU1FQOXNnQVRTQWt4emdBUklJV1p3TmhvQWpnTC9hditzCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQxCgkvLyBmYWN0b3J5QXBwID0gdGhpcy5pdHhuLmNyZWF0ZWRBcHBsaWNhdGlvbklECglpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECglmcmFtZV9idXJ5IC0xIC8vIGZhY3RvcnlBcHA6IGFwcGxpY2F0aW9uCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0MwoJLy8gc2VuZFBheW1lbnQoewoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NDQKCS8vIGFtb3VudDogMjAwXzAwMAoJaW50IDIwMF8wMDAKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo0NQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQ2CgkvLyByZWNlaXZlcjogZmFjdG9yeUFwcC5hZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gZmFjdG9yeUFwcDogYXBwbGljYXRpb24KCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBSZWNlaXZlcgoJaXR4bl9zdWJtaXQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjQ5CgkvLyBjcmVhdGVkQXNzZXQgPSBzZW5kTWV0aG9kQ2FsbDxbc3RyaW5nLCBzdHJpbmddLCBBc3NldD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAiY3JlYXRlTkZUKHN0cmluZyxzdHJpbmcpdWludDY0IgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjUwCgkvLyBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwCglmcmFtZV9kaWcgLTEgLy8gZmFjdG9yeUFwcDogYXBwbGljYXRpb24KCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTIKCS8vIG1ldGhvZEFyZ3M6IFsnTXkgTkZUJywgJ01ORlQnXQoJYnl0ZSAiTXkgTkZUIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCWJ5dGUgIk1ORlQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NTMKCS8vIG9uQ29tcGxldGlvbjogJ05vT3AnCglpbnQgTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjU0CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJYnRvaQoJZnJhbWVfYnVyeSAtMiAvLyBjcmVhdGVkQXNzZXQ6IGFzc2V0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo1OAoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjU5CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjYwCgkvLyB4ZmVyQXNzZXQ6IGNyZWF0ZWRBc3NldAoJZnJhbWVfZGlnIC0yIC8vIGNyZWF0ZWRBc3NldDogYXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo2MQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo2NAoJLy8gc2VuZE1ldGhvZENhbGw8W0Fzc2V0LCBBY2NvdW50XSwgdm9pZD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAidHJhbnNmZXJORlQoYXNzZXQsYWNjb3VudCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjY1CgkvLyBhcHBsaWNhdGlvbklEOiBmYWN0b3J5QXBwCglmcmFtZV9kaWcgLTEgLy8gZmFjdG9yeUFwcDogYXBwbGljYXRpb24KCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NjcKCS8vIG1ldGhvZEFyZ3M6IFtjcmVhdGVkQXNzZXQsIHRoaXMuYXBwLmFkZHJlc3NdCglmcmFtZV9kaWcgLTIgLy8gY3JlYXRlZEFzc2V0OiBhc3NldAoJaXR4bl9maWVsZCBBc3NldHMKCWludCAwCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFjY291bnRzCglpbnQgMQoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjY4CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6NjkKCS8vIG9uQ29tcGxldGlvbjogJ05vT3AnCglpbnQgTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo3MgoJLy8gcmV0dXJuIGNyZWF0ZWRBc3NldDsKCWZyYW1lX2RpZyAtMiAvLyBjcmVhdGVkQXNzZXQ6IGFzc2V0CglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgIm1pbnRBbmRHZXRBc3NldCgpdWludDY0IgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX21pbnRBbmRHZXRBc3NldA==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "FactoryCaller", + "desc": "", + "methods": [ + { + "name": "mintAndGetAsset", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/itxns/artifacts/NFTFactory.json b/examples/itxns/artifacts/NFTFactory.json index a7ac5a9ce..5f9270aca 100644 --- a/examples/itxns/artifacts/NFTFactory.json +++ b/examples/itxns/artifacts/NFTFactory.json @@ -1 +1,87 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX2NyZWF0ZU5GVDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIGNyZWF0ZU5GVAoJaW50IDEKCXJldHVybgoKY3JlYXRlTkZUOgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo5CgkvLyByZXR1cm4gc2VuZEFzc2V0Q3JlYXRpb24oewoJaXR4bl9iZWdpbgoJaW50IGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjEwCgkvLyBjb25maWdBc3NldE5hbWU6IG5hbWUKCWZyYW1lX2RpZyAtMSAvLyBuYW1lOiBieXRlcwoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjExCgkvLyBjb25maWdBc3NldFVuaXROYW1lOiB1bml0TmFtZQoJZnJhbWVfZGlnIC0yIC8vIHVuaXROYW1lOiBieXRlcwoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoxMgoJLy8gY29uZmlnQXNzZXRUb3RhbDogMQoJaW50IDEKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTMKCS8vIGNvbmZpZ0Fzc2V0RGVjaW1hbHM6IDAKCWludCAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjE0CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3RyYW5zZmVyTkZUOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIHRyYW5zZmVyTkZUCglpbnQgMQoJcmV0dXJuCgp0cmFuc2Zlck5GVDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjAKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjEKCS8vIGFzc2V0QW1vdW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjIKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogYXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoyMwoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgImNyZWF0ZU5GVChzdHJpbmcsc3RyaW5nKXVpbnQ2NCIKCW1ldGhvZCAidHJhbnNmZXJORlQoYXNzZXQsYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2NyZWF0ZU5GVCBhYmlfcm91dGVfdHJhbnNmZXJORlQ=","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"NFTFactory","desc":"","methods":[{"name":"createNFT","args":[{"name":"name","type":"string","desc":""},{"name":"unitName","type":"string","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"transferNFT","args":[{"name":"asset","type":"asset","desc":""},{"name":"receiver","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "createNFT(string,string)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "transferNFT(asset,account)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX2NyZWF0ZU5GVDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIGNyZWF0ZU5GVAoJaW50IDEKCXJldHVybgoKY3JlYXRlTkZUOgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czo5CgkvLyByZXR1cm4gc2VuZEFzc2V0Q3JlYXRpb24oewoJaXR4bl9iZWdpbgoJaW50IGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjEwCgkvLyBjb25maWdBc3NldE5hbWU6IG5hbWUKCWZyYW1lX2RpZyAtMSAvLyBuYW1lOiBieXRlcwoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjExCgkvLyBjb25maWdBc3NldFVuaXROYW1lOiB1bml0TmFtZQoJZnJhbWVfZGlnIC0yIC8vIHVuaXROYW1lOiBieXRlcwoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoxMgoJLy8gY29uZmlnQXNzZXRUb3RhbDogMQoJaW50IDEKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTMKCS8vIGNvbmZpZ0Fzc2V0RGVjaW1hbHM6IDAKCWludCAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKCgkvLyBleGFtcGxlcy9pdHhucy9pdHhucy5hbGdvLnRzOjE0CgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3RyYW5zZmVyTkZUOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQXNzZXRzCgljYWxsc3ViIHRyYW5zZmVyTkZUCglpbnQgMQoJcmV0dXJuCgp0cmFuc2Zlck5GVDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjAKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IGFjY291bnQKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjEKCS8vIGFzc2V0QW1vdW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGV4YW1wbGVzL2l0eG5zL2l0eG5zLmFsZ28udHM6MjIKCS8vIHhmZXJBc3NldDogYXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBhc3NldDogYXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gZXhhbXBsZXMvaXR4bnMvaXR4bnMuYWxnby50czoyMwoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJYm56IGJhcmVfcm91dGVfY3JlYXRlCgpyb3V0ZV9hYmk6CgltZXRob2QgImNyZWF0ZU5GVChzdHJpbmcsc3RyaW5nKXVpbnQ2NCIKCW1ldGhvZCAidHJhbnNmZXJORlQoYXNzZXQsYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2NyZWF0ZU5GVCBhYmlfcm91dGVfdHJhbnNmZXJORlQ=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "NFTFactory", + "desc": "", + "methods": [ + { + "name": "createNFT", + "args": [ + { + "name": "name", + "type": "string", + "desc": "" + }, + { + "name": "unitName", + "type": "string", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "transferNFT", + "args": [ + { + "name": "asset", + "type": "asset", + "desc": "" + }, + { + "name": "receiver", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/merkle/artifacts/MerkleTree.json b/examples/merkle/artifacts/MerkleTree.json index 3f8ffbdc0..9f93d7dac 100644 --- a/examples/merkle/artifacts/MerkleTree.json +++ b/examples/merkle/artifacts/MerkleTree.json @@ -1 +1,127 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{"root":{"type":"bytes","key":"root"},"size":{"type":"uint64","key":"size"}},"reserved":{}}},"state":{"global":{"num_byte_slices":1,"num_uints":1},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKY2FsY0luaXRSb290OgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjE3CgkvLyByZXN1bHQgPSBFTVBUWV9IQVNICgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NAoJLy8gaGV4KCdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JykKCWJ5dGUgMHhlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1CglmcmFtZV9idXJ5IC0xIC8vIHJlc3VsdDogYnl0ZXMKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6MTkKCS8vIGkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCmZvcl8wOgoJZnJhbWVfZGlnIC0yIC8vIGk6IHVpbnQ2NAoJaW50IDMKCTwKCWJ6IGZvcl8wX2VuZAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czoyMAoJLy8gcmVzdWx0ID0gc2hhMjU2KHJlc3VsdCArIHJlc3VsdCkKCWZyYW1lX2RpZyAtMSAvLyByZXN1bHQ6IGJ5dGVzCglmcmFtZV9kaWcgLTEgLy8gcmVzdWx0OiBieXRlcwoJY29uY2F0CglzaGEyNTYKCWZyYW1lX2J1cnkgLTEgLy8gcmVzdWx0OiBieXRlcwoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czoxOQoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTIgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCWIgZm9yXzAKCmZvcl8wX2VuZDoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czoyMwoJLy8gcmV0dXJuIHJlc3VsdDsKCWZyYW1lX2RpZyAtMSAvLyByZXN1bHQ6IGJ5dGVzCglyZXRzdWIKCmhhc2hDb25jYXQ6Cglwcm90byAyIDEKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6MjcKCS8vIHJldHVybiBzaGEyNTYobGVmdCArIHJpZ2h0KTsKCWZyYW1lX2RpZyAtMSAvLyBsZWZ0OiBieXRlcwoJZnJhbWVfZGlnIC0yIC8vIHJpZ2h0OiBieXRlcwoJY29uY2F0CglzaGEyNTYKCXJldHN1YgoKaXNSaWdodFNpYmxpbmc6Cglwcm90byAxIDEKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6MzEKCS8vIHJldHVybiBnZXRieXRlKGVsZW0sIDApID09PSBSSUdIVF9TSUJMSU5HX1BSRUZJWDsKCWZyYW1lX2RpZyAtMSAvLyBlbGVtOiBieXRlWzMzXQoJaW50IDAKCWdldGJ5dGUKCWludCAxNzAKCT09CglyZXRzdWIKCmNhbGNSb290OgoJcHJvdG8gNSAxCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjM1CgkvLyByZXN1bHQgPSBsZWFmCglmcmFtZV9kaWcgLTEgLy8gbGVhZjogYnl0ZXMKCWZyYW1lX2J1cnkgLTMgLy8gcmVzdWx0OiBieXRlcwoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czozNwoJLy8gaSA9IDAKCWludCAwCglmcmFtZV9idXJ5IC00IC8vIGk6IHVpbnQ2NAoKZm9yXzE6CglmcmFtZV9kaWcgLTQgLy8gaTogdWludDY0CglpbnQgMwoJPAoJYnogZm9yXzFfZW5kCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjM4CgkvLyBlbGVtID0gcGF0aFtpXQoJZnJhbWVfZGlnIC0yIC8vIHBhdGg6IGJ5dGVbMzNdWzNdCglmcmFtZV9kaWcgLTQgLy8gaTogdWludDY0CglpbnQgMzMgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAzMwoJZXh0cmFjdDMKCWZyYW1lX2J1cnkgLTUgLy8gZWxlbTogYnl0ZVszM10KCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NDAKCS8vIHRoaXMuaXNSaWdodFNpYmxpbmcoZWxlbSkKCWZyYW1lX2RpZyAtNSAvLyBlbGVtOiBieXRlWzMzXQoJY2FsbHN1YiBpc1JpZ2h0U2libGluZwoJYnogaWYwX2Vsc2UKCgkvLyBpZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjQxCgkvLyByZXN1bHQgPSB0aGlzLmhhc2hDb25jYXQocmVzdWx0LCBleHRyYWN0MyhlbGVtLCAxLCAzMikpCglmcmFtZV9kaWcgLTUgLy8gZWxlbTogYnl0ZVszM10KCWludCAxCglpbnQgMzIKCWV4dHJhY3QzCglmcmFtZV9kaWcgLTMgLy8gcmVzdWx0OiBieXRlcwoJY2FsbHN1YiBoYXNoQ29uY2F0CglmcmFtZV9idXJ5IC0zIC8vIHJlc3VsdDogYnl0ZXMKCWIgaWYwX2VuZAoKaWYwX2Vsc2U6CgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NDMKCS8vIHJlc3VsdCA9IHRoaXMuaGFzaENvbmNhdChleHRyYWN0MyhlbGVtLCAxLCAzMiksIHJlc3VsdCkKCWZyYW1lX2RpZyAtMyAvLyByZXN1bHQ6IGJ5dGVzCglmcmFtZV9kaWcgLTUgLy8gZWxlbTogYnl0ZVszM10KCWludCAxCglpbnQgMzIKCWV4dHJhY3QzCgljYWxsc3ViIGhhc2hDb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gcmVzdWx0OiBieXRlcwoKaWYwX2VuZDoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czozNwoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTQgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtNCAvLyBpOiB1aW50NjQKCWIgZm9yXzEKCmZvcl8xX2VuZDoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo0NwoJLy8gcmV0dXJuIHJlc3VsdDsKCWZyYW1lX2RpZyAtMyAvLyByZXN1bHQ6IGJ5dGVzCglyZXRzdWIKCmJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGRlbGV0ZQoJaW50IDEKCXJldHVybgoKZGVsZXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjUyCgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCmJhcmVfcm91dGVfY3JlYXRlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGNyZWF0ZQoJaW50IDEKCXJldHVybgoKY3JlYXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjU3CgkvLyB0aGlzLnJvb3QucHV0KHRoaXMuY2FsY0luaXRSb290KCkpCglieXRlICJyb290IgoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIGNhbGNJbml0Um9vdAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX3ZlcmlmeToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgdmVyaWZ5CglpbnQgMQoJcmV0dXJuCgp2ZXJpZnk6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NjEKCS8vIGFzc2VydCh0aGlzLnJvb3QuZ2V0KCkgPT09IHRoaXMuY2FsY1Jvb3Qoc2hhMjU2KGRhdGEpLCBwYXRoKSkKCWJ5dGUgInJvb3QiCglhcHBfZ2xvYmFsX2dldAoJYnl0ZSAweAoJZHVwbiAyCglmcmFtZV9kaWcgLTIgLy8gcGF0aDogYnl0ZVszM11bM10KCWZyYW1lX2RpZyAtMSAvLyBkYXRhOiBieXRlcwoJc2hhMjU2CgljYWxsc3ViIGNhbGNSb290Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9hcHBlbmRMZWFmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoJY2FsbHN1YiBhcHBlbmRMZWFmCglpbnQgMQoJcmV0dXJuCgphcHBlbmRMZWFmOgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjY1CgkvLyBhc3NlcnQoZGF0YSAhPT0gJycpCglmcmFtZV9kaWcgLTEgLy8gZGF0YTogYnl0ZXMKCWJ5dGUgIiIKCSE9Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NjYKCS8vIGFzc2VydCh0aGlzLnJvb3QuZ2V0KCkgPT09IHRoaXMuY2FsY1Jvb3QoRU1QVFlfSEFTSCwgcGF0aCkpCglieXRlICJyb290IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHgKCWR1cG4gMgoJZnJhbWVfZGlnIC0yIC8vIHBhdGg6IGJ5dGVbMzNdWzNdCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjQKCS8vIGhleCgnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NScpCglieXRlIDB4ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NQoJY2FsbHN1YiBjYWxjUm9vdAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo2OAoJLy8gdGhpcy5yb290LnB1dCh0aGlzLmNhbGNSb290KHNoYTI1NihkYXRhKSwgcGF0aCkpCglieXRlICJyb290IgoJYnl0ZSAweAoJZHVwbiAyCglmcmFtZV9kaWcgLTIgLy8gcGF0aDogYnl0ZVszM11bM10KCWZyYW1lX2RpZyAtMSAvLyBkYXRhOiBieXRlcwoJc2hhMjU2CgljYWxsc3ViIGNhbGNSb290CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo3MAoJLy8gdGhpcy5zaXplLnB1dCh0aGlzLnNpemUuZ2V0KCkgKyAxKQoJYnl0ZSAic2l6ZSIKCWJ5dGUgInNpemUiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCSsKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVMZWFmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgdXBkYXRlTGVhZgoJaW50IDEKCXJldHVybgoKdXBkYXRlTGVhZjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo3NAoJLy8gYXNzZXJ0KG5ld0RhdGEgIT09ICcnKQoJZnJhbWVfZGlnIC0yIC8vIG5ld0RhdGE6IGJ5dGVzCglieXRlICIiCgkhPQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjc1CgkvLyBhc3NlcnQodGhpcy5yb290LmdldCgpID09PSB0aGlzLmNhbGNSb290KHNoYTI1NihvbGREYXRhKSwgcGF0aCkpCglieXRlICJyb290IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHgKCWR1cG4gMgoJZnJhbWVfZGlnIC0zIC8vIHBhdGg6IGJ5dGVbMzNdWzNdCglmcmFtZV9kaWcgLTEgLy8gb2xkRGF0YTogYnl0ZXMKCXNoYTI1NgoJY2FsbHN1YiBjYWxjUm9vdAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo3NwoJLy8gdGhpcy5yb290LnB1dCh0aGlzLmNhbGNSb290KHNoYTI1NihuZXdEYXRhKSwgcGF0aCkpCglieXRlICJyb290IgoJYnl0ZSAweAoJZHVwbiAyCglmcmFtZV9kaWcgLTMgLy8gcGF0aDogYnl0ZVszM11bM10KCWZyYW1lX2RpZyAtMiAvLyBuZXdEYXRhOiBieXRlcwoJc2hhMjU2CgljYWxsc3ViIGNhbGNSb290CglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb24KCnJvdXRlX2FiaToKCW1ldGhvZCAidmVyaWZ5KGJ5dGVbXSxieXRlWzMzXVszXSl2b2lkIgoJbWV0aG9kICJhcHBlbmRMZWFmKGJ5dGVbXSxieXRlWzMzXVszXSl2b2lkIgoJbWV0aG9kICJ1cGRhdGVMZWFmKGJ5dGVbXSxieXRlW10sYnl0ZVszM11bM10pdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV92ZXJpZnkgYWJpX3JvdXRlX2FwcGVuZExlYWYgYWJpX3JvdXRlX3VwZGF0ZUxlYWY=","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"MerkleTree","desc":"","methods":[{"name":"verify","args":[{"name":"data","type":"byte[]","desc":""},{"name":"path","type":"byte[33][3]","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"appendLeaf","args":[{"name":"data","type":"byte[]","desc":""},{"name":"path","type":"byte[33][3]","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"updateLeaf","args":[{"name":"oldData","type":"byte[]","desc":""},{"name":"newData","type":"byte[]","desc":""},{"name":"path","type":"byte[33][3]","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "verify(byte[],byte[33][3])void": { + "call_config": { + "no_op": "CALL" + } + }, + "appendLeaf(byte[],byte[33][3])void": { + "call_config": { + "no_op": "CALL" + } + }, + "updateLeaf(byte[],byte[],byte[33][3])void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "delete_application": "CALL", + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "root": { + "type": "bytes", + "key": "root" + }, + "size": { + "type": "uint64", + "key": "size" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 1 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKY2FsY0luaXRSb290OgoJcHJvdG8gMiAxCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjE3CgkvLyByZXN1bHQgPSBFTVBUWV9IQVNICgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NAoJLy8gaGV4KCdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JykKCWJ5dGUgMHhlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1CglmcmFtZV9idXJ5IC0xIC8vIHJlc3VsdDogYnl0ZXMKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6MTkKCS8vIGkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCmZvcl8wOgoJZnJhbWVfZGlnIC0yIC8vIGk6IHVpbnQ2NAoJaW50IDMKCTwKCWJ6IGZvcl8wX2VuZAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czoyMAoJLy8gcmVzdWx0ID0gc2hhMjU2KHJlc3VsdCArIHJlc3VsdCkKCWZyYW1lX2RpZyAtMSAvLyByZXN1bHQ6IGJ5dGVzCglmcmFtZV9kaWcgLTEgLy8gcmVzdWx0OiBieXRlcwoJY29uY2F0CglzaGEyNTYKCWZyYW1lX2J1cnkgLTEgLy8gcmVzdWx0OiBieXRlcwoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czoxOQoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTIgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCWIgZm9yXzAKCmZvcl8wX2VuZDoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czoyMwoJLy8gcmV0dXJuIHJlc3VsdDsKCWZyYW1lX2RpZyAtMSAvLyByZXN1bHQ6IGJ5dGVzCglyZXRzdWIKCmhhc2hDb25jYXQ6Cglwcm90byAyIDEKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6MjcKCS8vIHJldHVybiBzaGEyNTYobGVmdCArIHJpZ2h0KTsKCWZyYW1lX2RpZyAtMSAvLyBsZWZ0OiBieXRlcwoJZnJhbWVfZGlnIC0yIC8vIHJpZ2h0OiBieXRlcwoJY29uY2F0CglzaGEyNTYKCXJldHN1YgoKaXNSaWdodFNpYmxpbmc6Cglwcm90byAxIDEKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6MzEKCS8vIHJldHVybiBnZXRieXRlKGVsZW0sIDApID09PSBSSUdIVF9TSUJMSU5HX1BSRUZJWDsKCWZyYW1lX2RpZyAtMSAvLyBlbGVtOiBieXRlWzMzXQoJaW50IDAKCWdldGJ5dGUKCWludCAxNzAKCT09CglyZXRzdWIKCmNhbGNSb290OgoJcHJvdG8gNSAxCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjM1CgkvLyByZXN1bHQgPSBsZWFmCglmcmFtZV9kaWcgLTEgLy8gbGVhZjogYnl0ZXMKCWZyYW1lX2J1cnkgLTMgLy8gcmVzdWx0OiBieXRlcwoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czozNwoJLy8gaSA9IDAKCWludCAwCglmcmFtZV9idXJ5IC00IC8vIGk6IHVpbnQ2NAoKZm9yXzE6CglmcmFtZV9kaWcgLTQgLy8gaTogdWludDY0CglpbnQgMwoJPAoJYnogZm9yXzFfZW5kCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjM4CgkvLyBlbGVtID0gcGF0aFtpXQoJZnJhbWVfZGlnIC0yIC8vIHBhdGg6IGJ5dGVbMzNdWzNdCglmcmFtZV9kaWcgLTQgLy8gaTogdWludDY0CglpbnQgMzMgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAzMwoJZXh0cmFjdDMKCWZyYW1lX2J1cnkgLTUgLy8gZWxlbTogYnl0ZVszM10KCgkvLyBpZjBfY29uZGl0aW9uCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NDAKCS8vIHRoaXMuaXNSaWdodFNpYmxpbmcoZWxlbSkKCWZyYW1lX2RpZyAtNSAvLyBlbGVtOiBieXRlWzMzXQoJY2FsbHN1YiBpc1JpZ2h0U2libGluZwoJYnogaWYwX2Vsc2UKCgkvLyBpZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjQxCgkvLyByZXN1bHQgPSB0aGlzLmhhc2hDb25jYXQocmVzdWx0LCBleHRyYWN0MyhlbGVtLCAxLCAzMikpCglmcmFtZV9kaWcgLTUgLy8gZWxlbTogYnl0ZVszM10KCWludCAxCglpbnQgMzIKCWV4dHJhY3QzCglmcmFtZV9kaWcgLTMgLy8gcmVzdWx0OiBieXRlcwoJY2FsbHN1YiBoYXNoQ29uY2F0CglmcmFtZV9idXJ5IC0zIC8vIHJlc3VsdDogYnl0ZXMKCWIgaWYwX2VuZAoKaWYwX2Vsc2U6CgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NDMKCS8vIHJlc3VsdCA9IHRoaXMuaGFzaENvbmNhdChleHRyYWN0MyhlbGVtLCAxLCAzMiksIHJlc3VsdCkKCWZyYW1lX2RpZyAtMyAvLyByZXN1bHQ6IGJ5dGVzCglmcmFtZV9kaWcgLTUgLy8gZWxlbTogYnl0ZVszM10KCWludCAxCglpbnQgMzIKCWV4dHJhY3QzCgljYWxsc3ViIGhhc2hDb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gcmVzdWx0OiBieXRlcwoKaWYwX2VuZDoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czozNwoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTQgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtNCAvLyBpOiB1aW50NjQKCWIgZm9yXzEKCmZvcl8xX2VuZDoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo0NwoJLy8gcmV0dXJuIHJlc3VsdDsKCWZyYW1lX2RpZyAtMyAvLyByZXN1bHQ6IGJ5dGVzCglyZXRzdWIKCmJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgRGVsZXRlQXBwbGljYXRpb24KCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGRlbGV0ZQoJaW50IDEKCXJldHVybgoKZGVsZXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjUyCgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJYXNzZXJ0Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCmJhcmVfcm91dGVfY3JlYXRlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGNyZWF0ZQoJaW50IDEKCXJldHVybgoKY3JlYXRlOgoJcHJvdG8gMCAwCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjU3CgkvLyB0aGlzLnJvb3QucHV0KHRoaXMuY2FsY0luaXRSb290KCkpCglieXRlICJyb290IgoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIGNhbGNJbml0Um9vdAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX3ZlcmlmeToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgdmVyaWZ5CglpbnQgMQoJcmV0dXJuCgp2ZXJpZnk6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NjEKCS8vIGFzc2VydCh0aGlzLnJvb3QuZ2V0KCkgPT09IHRoaXMuY2FsY1Jvb3Qoc2hhMjU2KGRhdGEpLCBwYXRoKSkKCWJ5dGUgInJvb3QiCglhcHBfZ2xvYmFsX2dldAoJYnl0ZSAweAoJZHVwbiAyCglmcmFtZV9kaWcgLTIgLy8gcGF0aDogYnl0ZVszM11bM10KCWZyYW1lX2RpZyAtMSAvLyBkYXRhOiBieXRlcwoJc2hhMjU2CgljYWxsc3ViIGNhbGNSb290Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9hcHBlbmRMZWFmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoJY2FsbHN1YiBhcHBlbmRMZWFmCglpbnQgMQoJcmV0dXJuCgphcHBlbmRMZWFmOgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjY1CgkvLyBhc3NlcnQoZGF0YSAhPT0gJycpCglmcmFtZV9kaWcgLTEgLy8gZGF0YTogYnl0ZXMKCWJ5dGUgIiIKCSE9Cglhc3NlcnQKCgkvLyBleGFtcGxlcy9tZXJrbGUvbWVya2xlLmFsZ28udHM6NjYKCS8vIGFzc2VydCh0aGlzLnJvb3QuZ2V0KCkgPT09IHRoaXMuY2FsY1Jvb3QoRU1QVFlfSEFTSCwgcGF0aCkpCglieXRlICJyb290IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHgKCWR1cG4gMgoJZnJhbWVfZGlnIC0yIC8vIHBhdGg6IGJ5dGVbMzNdWzNdCgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjQKCS8vIGhleCgnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NScpCglieXRlIDB4ZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NQoJY2FsbHN1YiBjYWxjUm9vdAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo2OAoJLy8gdGhpcy5yb290LnB1dCh0aGlzLmNhbGNSb290KHNoYTI1NihkYXRhKSwgcGF0aCkpCglieXRlICJyb290IgoJYnl0ZSAweAoJZHVwbiAyCglmcmFtZV9kaWcgLTIgLy8gcGF0aDogYnl0ZVszM11bM10KCWZyYW1lX2RpZyAtMSAvLyBkYXRhOiBieXRlcwoJc2hhMjU2CgljYWxsc3ViIGNhbGNSb290CglhcHBfZ2xvYmFsX3B1dAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo3MAoJLy8gdGhpcy5zaXplLnB1dCh0aGlzLnNpemUuZ2V0KCkgKyAxKQoJYnl0ZSAic2l6ZSIKCWJ5dGUgInNpemUiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCSsKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVMZWFmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgdXBkYXRlTGVhZgoJaW50IDEKCXJldHVybgoKdXBkYXRlTGVhZjoKCXByb3RvIDMgMAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo3NAoJLy8gYXNzZXJ0KG5ld0RhdGEgIT09ICcnKQoJZnJhbWVfZGlnIC0yIC8vIG5ld0RhdGE6IGJ5dGVzCglieXRlICIiCgkhPQoJYXNzZXJ0CgoJLy8gZXhhbXBsZXMvbWVya2xlL21lcmtsZS5hbGdvLnRzOjc1CgkvLyBhc3NlcnQodGhpcy5yb290LmdldCgpID09PSB0aGlzLmNhbGNSb290KHNoYTI1NihvbGREYXRhKSwgcGF0aCkpCglieXRlICJyb290IgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgMHgKCWR1cG4gMgoJZnJhbWVfZGlnIC0zIC8vIHBhdGg6IGJ5dGVbMzNdWzNdCglmcmFtZV9kaWcgLTEgLy8gb2xkRGF0YTogYnl0ZXMKCXNoYTI1NgoJY2FsbHN1YiBjYWxjUm9vdAoJPT0KCWFzc2VydAoKCS8vIGV4YW1wbGVzL21lcmtsZS9tZXJrbGUuYWxnby50czo3NwoJLy8gdGhpcy5yb290LnB1dCh0aGlzLmNhbGNSb290KHNoYTI1NihuZXdEYXRhKSwgcGF0aCkpCglieXRlICJyb290IgoJYnl0ZSAweAoJZHVwbiAyCglmcmFtZV9kaWcgLTMgLy8gcGF0aDogYnl0ZVszM11bM10KCWZyYW1lX2RpZyAtMiAvLyBuZXdEYXRhOiBieXRlcwoJc2hhMjU2CgljYWxsc3ViIGNhbGNSb290CglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IERlbGV0ZUFwcGxpY2F0aW9uCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfRGVsZXRlQXBwbGljYXRpb24KCnJvdXRlX2FiaToKCW1ldGhvZCAidmVyaWZ5KGJ5dGVbXSxieXRlWzMzXVszXSl2b2lkIgoJbWV0aG9kICJhcHBlbmRMZWFmKGJ5dGVbXSxieXRlWzMzXVszXSl2b2lkIgoJbWV0aG9kICJ1cGRhdGVMZWFmKGJ5dGVbXSxieXRlW10sYnl0ZVszM11bM10pdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV92ZXJpZnkgYWJpX3JvdXRlX2FwcGVuZExlYWYgYWJpX3JvdXRlX3VwZGF0ZUxlYWY=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "MerkleTree", + "desc": "", + "methods": [ + { + "name": "verify", + "args": [ + { + "name": "data", + "type": "byte[]", + "desc": "" + }, + { + "name": "path", + "type": "byte[33][3]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "appendLeaf", + "args": [ + { + "name": "data", + "type": "byte[]", + "desc": "" + }, + { + "name": "path", + "type": "byte[33][3]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "updateLeaf", + "args": [ + { + "name": "oldData", + "type": "byte[]", + "desc": "" + }, + { + "name": "newData", + "type": "byte[]", + "desc": "" + }, + { + "name": "path", + "type": "byte[33][3]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/simple/artifacts/Simple.json b/examples/simple/artifacts/Simple.json index 0f919c022..599524073 100644 --- a/examples/simple/artifacts/Simple.json +++ b/examples/simple/artifacts/Simple.json @@ -1 +1,132 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{"counter":{"type":"uint64","key":"counter"}},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":1},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlQXBwCglpbnQgMQoJcmV0dXJuCgpjcmVhdGVBcHA6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX2luY3I6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgaW5jcgoJaW50IDEKCXJldHVybgoKaW5jcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoxMAoJLy8gdGhpcy5jb3VudGVyLnB1dCh0aGlzLmNvdW50ZXIuZ2V0KCkgKyBpKQoJYnl0ZSAiY291bnRlciIKCWJ5dGUgImNvdW50ZXIiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJKwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2RlY3I6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgZGVjcgoJaW50IDEKCXJldHVybgoKZGVjcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoxNAoJLy8gdGhpcy5jb3VudGVyLnB1dCh0aGlzLmNvdW50ZXIuZ2V0KCkgLSBpKQoJYnl0ZSAiY291bnRlciIKCWJ5dGUgImNvdW50ZXIiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJLQoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2FkZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBhZGQKCWludCAxCglyZXR1cm4KCmFkZDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoxOAoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50MjU2CgliKwoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdWI6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgc3ViCglpbnQgMQoJcmV0dXJuCgpzdWI6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9zaW1wbGUvc2ltcGxlLmFsZ28udHM6MjIKCS8vIHJldHVybiBhIC0gYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MjU2CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDI1NgoJYi0KCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoKcm91dGVfYWJpOgoJbWV0aG9kICJpbmNyKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJkZWNyKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhZGQodWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInN1Yih1aW50MjU2LHVpbnQyNTYpdWludDI1NiIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9pbmNyIGFiaV9yb3V0ZV9kZWNyIGFiaV9yb3V0ZV9hZGQgYWJpX3JvdXRlX3N1Yg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoyNwoJLy8gdGhpcy5jb3VudGVyLnB1dCh0aGlzLmNvdW50ZXIuZ2V0KCkgKyAxKQoJYnl0ZSAiY291bnRlciIKCWJ5dGUgImNvdW50ZXIiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCSsKCWFwcF9nbG9iYWxfcHV0"},"contract":{"name":"Simple","desc":"","methods":[{"name":"incr","args":[{"name":"i","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"decr","args":[{"name":"i","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"add","args":[{"name":"a","type":"uint256","desc":""},{"name":"b","type":"uint256","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}},{"name":"sub","args":[{"name":"a","type":"uint256","desc":""},{"name":"b","type":"uint256","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "incr(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "decr(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "add(uint256,uint256)uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "sub(uint256,uint256)uint256": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "counter": { + "type": "uint64", + "key": "counter" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 1 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlQXBwCglpbnQgMQoJcmV0dXJuCgpjcmVhdGVBcHA6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX2luY3I6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgaW5jcgoJaW50IDEKCXJldHVybgoKaW5jcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoxMAoJLy8gdGhpcy5jb3VudGVyLnB1dCh0aGlzLmNvdW50ZXIuZ2V0KCkgKyBpKQoJYnl0ZSAiY291bnRlciIKCWJ5dGUgImNvdW50ZXIiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJKwoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2RlY3I6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgZGVjcgoJaW50IDEKCXJldHVybgoKZGVjcjoKCXByb3RvIDEgMAoKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoxNAoJLy8gdGhpcy5jb3VudGVyLnB1dCh0aGlzLmNvdW50ZXIuZ2V0KCkgLSBpKQoJYnl0ZSAiY291bnRlciIKCWJ5dGUgImNvdW50ZXIiCglhcHBfZ2xvYmFsX2dldAoJZnJhbWVfZGlnIC0xIC8vIGk6IHVpbnQ2NAoJLQoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2FkZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBhZGQKCWludCAxCglyZXR1cm4KCmFkZDoKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoxOAoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50MjU2CgliKwoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdWI6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgc3ViCglpbnQgMQoJcmV0dXJuCgpzdWI6Cglwcm90byAyIDAKCgkvLyBleGFtcGxlcy9zaW1wbGUvc2ltcGxlLmFsZ28udHM6MjIKCS8vIHJldHVybiBhIC0gYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MjU2CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDI1NgoJYi0KCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoKcm91dGVfYWJpOgoJbWV0aG9kICJpbmNyKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJkZWNyKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhZGQodWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInN1Yih1aW50MjU2LHVpbnQyNTYpdWludDI1NiIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9pbmNyIGFiaV9yb3V0ZV9kZWNyIGFiaV9yb3V0ZV9hZGQgYWJpX3JvdXRlX3N1Yg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKCS8vIGV4YW1wbGVzL3NpbXBsZS9zaW1wbGUuYWxnby50czoyNwoJLy8gdGhpcy5jb3VudGVyLnB1dCh0aGlzLmNvdW50ZXIuZ2V0KCkgKyAxKQoJYnl0ZSAiY291bnRlciIKCWJ5dGUgImNvdW50ZXIiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCSsKCWFwcF9nbG9iYWxfcHV0" + }, + "contract": { + "name": "Simple", + "desc": "", + "methods": [ + { + "name": "incr", + "args": [ + { + "name": "i", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "decr", + "args": [ + { + "name": "i", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "add", + "args": [ + { + "name": "a", + "type": "uint256", + "desc": "" + }, + { + "name": "b", + "type": "uint256", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + }, + { + "name": "sub", + "args": [ + { + "name": "a", + "type": "uint256", + "desc": "" + }, + { + "name": "b", + "type": "uint256", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/tuple_in_box/app.algo.ts b/examples/tuple_in_box/app.algo.ts index b214cedec..bf8b786ec 100644 --- a/examples/tuple_in_box/app.algo.ts +++ b/examples/tuple_in_box/app.algo.ts @@ -8,9 +8,6 @@ class ContactsApp extends Contract { myContact = new GlobalReference(); - @handle.createApplication - create(): void {} - setMyContact(name: string, company: string): void { const contact: Contact = { name: name, company: company }; @@ -18,12 +15,12 @@ class ContactsApp extends Contract { this.contacts.put(this.txn.sender, contact); } - addContact(name: string, company: string, address: Account): void { + addContact(name: string, company: string, address: Address): void { const contact: Contact = { name: name, company: company }; this.contacts.put(address, contact); } - updateContactField(field: string, value: string, address: Account): void { + updateContactField(field: string, value: string, address: Address): void { if (field === 'name') { this.contacts.get(address).name = value; } else if (field === 'company') { @@ -31,7 +28,7 @@ class ContactsApp extends Contract { } else throw Error('Invalid field'); } - verifyContactName(name: string, address: Account): void { + verifyContactName(name: string, address: Address): void { assert(this.contacts.get(address).name === name); } } diff --git a/examples/tuple_in_box/app.py b/examples/tuple_in_box/app.py index 1a699edce..03ed18f10 100644 --- a/examples/tuple_in_box/app.py +++ b/examples/tuple_in_box/app.py @@ -46,27 +46,17 @@ def add_contact(self, name: abi.String, company: abi.String, address: abi.Addres def update_contact_field( self, field: abi.String, value: abi.String, address: abi.Address ): - new_contact = Contact() old_contact = Contact() - - # Using .store_into() allows us to store the value of a box into a ABI variable - # Instantiate old_company instance for use with store_into old_company = abi.String() + update_name = Seq( - # Save the value of self.contacts[address] into old_contact (self.contacts[address].store_into(old_contact)), - # Save the value of old_contact.company into old_company (old_contact.company.store_into(old_company)), - # Create a new Contact instance, set the name to value, and set the company to old_company - # Note we can't update the field of an existing NamedTuple (at least not easily) new_contact.set(value, old_company), self.contacts[address].set(new_contact), ) - # Using .use() allows us to use the value of a box in a lambda function - # .use() is often shorter than store_into, but store_into is useful if you need to use the value multiple times throughout a Seq - # Note we don't need to manually instantiate an instance of old_name update_company = Seq( (self.contacts[address].store_into(old_contact)), old_contact.name.use(lambda old_name: new_contact.set(old_name, value)), diff --git a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.abi.json b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.abi.json index 067c7edb8..0cf73e0d8 100644 --- a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.abi.json +++ b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.abi.json @@ -37,7 +37,7 @@ }, { "name": "address", - "type": "account", + "type": "address", "desc": "" } ], @@ -62,7 +62,7 @@ }, { "name": "address", - "type": "account", + "type": "address", "desc": "" } ], @@ -82,7 +82,7 @@ }, { "name": "address", - "type": "account", + "type": "address", "desc": "" } ], diff --git a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.approval.teal b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.approval.teal index 86931b169..5d030fec5 100644 --- a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.approval.teal +++ b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.approval.teal @@ -72,21 +72,28 @@ end_calc_new_head: store 3 // full tuple retsub -bare_route_create: - txn OnCompletion - int NoOp - == - txn ApplicationID - int 0 - == - && - assert - callsub create - int 1 - return - -create: - proto 0 0 +process_dynamic_tuple_element: + proto 4 3 + frame_dig -4 // tuple head + frame_dig -2 // head offset + concat + frame_bury -4 // tuple head + frame_dig -1 // element + dup + len + frame_dig -2 // head offset + btoi + + + itob + extract 6 2 + frame_bury -2 // head offset + frame_dig -3 // tuple tail + swap + concat + frame_bury -3 // tuple tail + frame_dig -4 // tuple head + frame_dig -3 // tuple tail + frame_dig -2 // head offset retsub abi_route_setMyContact: @@ -110,18 +117,11 @@ abi_route_setMyContact: setMyContact: proto 3 0 - // examples/tuple_in_box/app.algo.ts:15 + // examples/tuple_in_box/app.algo.ts:12 // contact: Contact = { name: name, company: company } - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0004 - store 2 // head offset - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0004 // initial head offset frame_dig -1 // name: bytes dup len @@ -129,22 +129,7 @@ setMyContact: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element frame_dig -2 // company: bytes dup len @@ -152,30 +137,18 @@ setMyContact: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -3 // contact: Contact - // examples/tuple_in_box/app.algo.ts:17 + // examples/tuple_in_box/app.algo.ts:14 // this.myContact.put(contact) byte "myContact" frame_dig -3 // contact: Contact app_global_put - // examples/tuple_in_box/app.algo.ts:18 + // examples/tuple_in_box/app.algo.ts:15 // this.contacts.put(this.txn.sender, contact) txn Sender dup @@ -196,8 +169,6 @@ abi_route_addContact: assert byte 0x txna ApplicationArgs 3 - btoi - txnas Accounts txna ApplicationArgs 2 extract 2 0 txna ApplicationArgs 1 @@ -209,18 +180,11 @@ abi_route_addContact: addContact: proto 4 0 - // examples/tuple_in_box/app.algo.ts:22 + // examples/tuple_in_box/app.algo.ts:19 // contact: Contact = { name: name, company: company } - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0004 - store 2 // head offset - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0004 // initial head offset frame_dig -1 // name: bytes dup len @@ -228,22 +192,7 @@ addContact: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element frame_dig -2 // company: bytes dup len @@ -251,26 +200,14 @@ addContact: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -4 // contact: Contact - // examples/tuple_in_box/app.algo.ts:23 + // examples/tuple_in_box/app.algo.ts:20 // this.contacts.put(address, contact) - frame_dig -3 // address: account + frame_dig -3 // address: address dup box_del pop @@ -288,8 +225,6 @@ abi_route_updateContactField: && assert txna ApplicationArgs 3 - btoi - txnas Accounts txna ApplicationArgs 2 extract 2 0 txna ApplicationArgs 1 @@ -302,7 +237,7 @@ updateContactField: proto 3 0 // if0_condition - // examples/tuple_in_box/app.algo.ts:27 + // examples/tuple_in_box/app.algo.ts:24 // field === 'name' frame_dig -1 // field: bytes byte "name" @@ -310,11 +245,11 @@ updateContactField: bz if0_elseif1_condition // if0_consequent - // examples/tuple_in_box/app.algo.ts:28 + // examples/tuple_in_box/app.algo.ts:25 // this.contacts.get(address).name = value // examples/tuple_in_box/app.algo.ts:1 // this.contacts.get(address) - frame_dig -3 // address: account + frame_dig -3 // address: address box_get assert dup @@ -336,8 +271,6 @@ updateContactField: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element frame_dig -2 // value: bytes dup @@ -353,7 +286,7 @@ updateContactField: callsub update_dynamic_head pop // pop length difference load 3 // full tuple - frame_dig -3 // address: account + frame_dig -3 // address: address dup box_del pop @@ -362,7 +295,7 @@ updateContactField: b if0_end if0_elseif1_condition: - // examples/tuple_in_box/app.algo.ts:29 + // examples/tuple_in_box/app.algo.ts:26 // field === 'company' frame_dig -1 // field: bytes byte "company" @@ -370,11 +303,11 @@ if0_elseif1_condition: bz if0_else // if0_elseif1_consequent - // examples/tuple_in_box/app.algo.ts:30 + // examples/tuple_in_box/app.algo.ts:27 // this.contacts.get(address).company = value // examples/tuple_in_box/app.algo.ts:1 // this.contacts.get(address) - frame_dig -3 // address: account + frame_dig -3 // address: address box_get assert dup @@ -396,8 +329,6 @@ if0_elseif1_condition: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element frame_dig -2 // value: bytes dup @@ -410,7 +341,7 @@ if0_elseif1_condition: callsub update_dynamic_tuple_element pop // pop length difference load 3 // full tuple - frame_dig -3 // address: account + frame_dig -3 // address: address dup box_del pop @@ -434,8 +365,6 @@ abi_route_verifyContactName: && assert txna ApplicationArgs 2 - btoi - txnas Accounts txna ApplicationArgs 1 extract 2 0 callsub verifyContactName @@ -445,12 +374,12 @@ abi_route_verifyContactName: verifyContactName: proto 2 0 - // examples/tuple_in_box/app.algo.ts:35 + // examples/tuple_in_box/app.algo.ts:32 // assert(this.contacts.get(address).name === name) - frame_dig -2 // address: account + frame_dig -2 // address: address box_get assert - frame_dig -2 // address: account + frame_dig -2 // address: address box_get assert dup @@ -481,15 +410,21 @@ verifyContactName: main: txn NumAppArgs bnz route_abi + + // default createApplication txn ApplicationID int 0 == - bnz bare_route_create + txn OnCompletion + int NoOp + == + && + return route_abi: method "setMyContact(string,string)void" - method "addContact(string,string,account)void" - method "updateContactField(string,string,account)void" - method "verifyContactName(string,account)void" + method "addContact(string,string,address)void" + method "updateContactField(string,string,address)void" + method "verifyContactName(string,address)void" txna ApplicationArgs 0 match abi_route_setMyContact abi_route_addContact abi_route_updateContactField abi_route_verifyContactName \ No newline at end of file diff --git a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.json b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.json index eabe33ddc..e94be07bc 100644 --- a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.json +++ b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.json @@ -1 +1,150 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{"myContact":{"type":"bytes","key":"myContact"}},"reserved":{}}},"state":{"global":{"num_byte_slices":1,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDMgMQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gaGVhZCBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQgb2YgZWxlbWVudAoJaW50IDAKCXN3YXAKCWV4dHJhY3QzIC8vIGV4dHJhY3QgcG9ydGlvbiBvZiB0dXBsZSBiZWZvcmUgZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIG5ldyB0dXBsZSBlbGVtZW50Cgljb25jYXQKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0xIC8vIGhlYWQgb2Zmc2V0CglleHRyYWN0X3VpbnQxNiAvLyBleHRyYWN0IGR5bmFtaWMgYXJyYXkgb2Zmc2V0IG9mIGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCSsKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsZW4KCXN1YnN0cmluZzMKCWNvbmNhdAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCTwKCWJueiBzd2FwcGVkX2RpZmZlcmVuY2UKCWZyYW1lX2RpZyAtMiAvLyBuZXcgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBuZXcgZWxlbWVudAoJZnJhbWVfZGlnIC0zIC8vIG9sZCBlbGVtZW50IGxlbmd0aAoJaW50IDEKCXN0b3JlIDcgLy8gc3VidHJhY3QgaGVhZCBkaWZmZXJlbmNlCgliIGdldF9kaWZmZXJlbmNlCgpzd2FwcGVkX2RpZmZlcmVuY2U6CglmcmFtZV9kaWcgLTMgLy8gb2xkIGVsZW1lbnQgbGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWludCAwCglzdG9yZSA3IC8vIHN1YnRyYWN0IGhlYWQgZGlmZmVyZW5jZQoKZ2V0X2RpZmZlcmVuY2U6CgktIC8vIGdldCBsZW5ndGggZGlmZmVyZW5jZQoJcmV0c3ViCgp1cGRhdGVfZHluYW1pY19oZWFkOgoJcHJvdG8gMiAwCglmcmFtZV9kaWcgLTIgLy8gbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gZHluYW1pYyBhcnJheSBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQKCWxvYWQgNyAvLyBzdWJ0cmFjdCBoZWFkIGRpZmZlcmVuY2UKCWJ6IHN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZQoJKyAvLyBhZGQgZGlmZmVyZW5jZSB0byBvZmZzZXQKCWIgZW5kX2NhbGNfbmV3X2hlYWQKCnN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZToKCXN3YXAKCS0gLy8gc3VidHJhY3QgZGlmZmVyZW5jZSBmcm9tIG9mZmV0CgplbmRfY2FsY19uZXdfaGVhZDoKCWl0b2IgLy8gY29udmVydCB0byBieXRlcwoJZXh0cmFjdCA2IDIgLy8gY29udmVydCB0byB1aW50MTYKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglzd2FwCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0Cglzd2FwCglyZXBsYWNlMyAvLyB1cGRhdGUgb2Zmc2V0CglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCXJldHN1YgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYWJpX3JvdXRlX3NldE15Q29udGFjdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIHNldE15Q29udGFjdAoJaW50IDEKCXJldHVybgoKc2V0TXlDb250YWN0OgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjE1CgkvLyBjb250YWN0OiBDb250YWN0ID0geyBuYW1lOiBuYW1lLCBjb21wYW55OiBjb21wYW55IH0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA0CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMiAvLyBjb21wYW55OiBieXRlcwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0zIC8vIGNvbnRhY3Q6IENvbnRhY3QKCgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MTcKCS8vIHRoaXMubXlDb250YWN0LnB1dChjb250YWN0KQoJYnl0ZSAibXlDb250YWN0IgoJZnJhbWVfZGlnIC0zIC8vIGNvbnRhY3Q6IENvbnRhY3QKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjE4CgkvLyB0aGlzLmNvbnRhY3RzLnB1dCh0aGlzLnR4bi5zZW5kZXIsIGNvbnRhY3QpCgl0eG4gU2VuZGVyCglkdXAKCWJveF9kZWwKCXBvcAoJZnJhbWVfZGlnIC0zIC8vIGNvbnRhY3Q6IENvbnRhY3QKCWJveF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2FkZENvbnRhY3Q6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglleHRyYWN0IDIgMAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgYWRkQ29udGFjdAoJaW50IDEKCXJldHVybgoKYWRkQ29udGFjdDoKCXByb3RvIDQgMAoKCS8vIGV4YW1wbGVzL3R1cGxlX2luX2JveC9hcHAuYWxnby50czoyMgoJLy8gY29udGFjdDogQ29udGFjdCA9IHsgbmFtZTogbmFtZSwgY29tcGFueTogY29tcGFueSB9CglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNAoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBuYW1lOiBieXRlcwoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gY29tcGFueTogYnl0ZXMKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyBjb250YWN0OiBDb250YWN0CgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjIzCgkvLyB0aGlzLmNvbnRhY3RzLnB1dChhZGRyZXNzLCBjb250YWN0KQoJZnJhbWVfZGlnIC0zIC8vIGFkZHJlc3M6IGFjY291bnQKCWR1cAoJYm94X2RlbAoJcG9wCglmcmFtZV9kaWcgLTQgLy8gY29udGFjdDogQ29udGFjdAoJYm94X3B1dAoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlQ29udGFjdEZpZWxkOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglidG9pCgl0eG5hcyBBY2NvdW50cwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIHVwZGF0ZUNvbnRhY3RGaWVsZAoJaW50IDEKCXJldHVybgoKdXBkYXRlQ29udGFjdEZpZWxkOgoJcHJvdG8gMyAwCgoJLy8gaWYwX2NvbmRpdGlvbgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjI3CgkvLyBmaWVsZCA9PT0gJ25hbWUnCglmcmFtZV9kaWcgLTEgLy8gZmllbGQ6IGJ5dGVzCglieXRlICJuYW1lIgoJPT0KCWJ6IGlmMF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MjgKCS8vIHRoaXMuY29udGFjdHMuZ2V0KGFkZHJlc3MpLm5hbWUgPSB2YWx1ZQoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjEKCS8vIHRoaXMuY29udGFjdHMuZ2V0KGFkZHJlc3MpCglmcmFtZV9kaWcgLTMgLy8gYWRkcmVzczogYWNjb3VudAoJYm94X2dldAoJYXNzZXJ0CglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gdmFsdWU6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMyAvLyBhZGRyZXNzOiBhY2NvdW50CglkdXAKCWJveF9kZWwKCXBvcAoJc3dhcAoJYm94X3B1dAoJYiBpZjBfZW5kCgppZjBfZWxzZWlmMV9jb25kaXRpb246CgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MjkKCS8vIGZpZWxkID09PSAnY29tcGFueScKCWZyYW1lX2RpZyAtMSAvLyBmaWVsZDogYnl0ZXMKCWJ5dGUgImNvbXBhbnkiCgk9PQoJYnogaWYwX2Vsc2UKCgkvLyBpZjBfZWxzZWlmMV9jb25zZXF1ZW50CgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MzAKCS8vIHRoaXMuY29udGFjdHMuZ2V0KGFkZHJlc3MpLmNvbXBhbnkgPSB2YWx1ZQoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjEKCS8vIHRoaXMuY29udGFjdHMuZ2V0KGFkZHJlc3MpCglmcmFtZV9kaWcgLTMgLy8gYWRkcmVzczogYWNjb3VudAoJYm94X2dldAoJYXNzZXJ0CglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gdmFsdWU6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMyAvLyBhZGRyZXNzOiBhY2NvdW50CglkdXAKCWJveF9kZWwKCXBvcAoJc3dhcAoJYm94X3B1dAoJYiBpZjBfZW5kCgppZjBfZWxzZToKCWVyciAvLyAnSW52YWxpZCBmaWVsZCcKCmlmMF9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV92ZXJpZnlDb250YWN0TmFtZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIHZlcmlmeUNvbnRhY3ROYW1lCglpbnQgMQoJcmV0dXJuCgp2ZXJpZnlDb250YWN0TmFtZToKCXByb3RvIDIgMAoKCS8vIGV4YW1wbGVzL3R1cGxlX2luX2JveC9hcHAuYWxnby50czozNQoJLy8gYXNzZXJ0KHRoaXMuY29udGFjdHMuZ2V0KGFkZHJlc3MpLm5hbWUgPT09IG5hbWUpCglmcmFtZV9kaWcgLTIgLy8gYWRkcmVzczogYWNjb3VudAoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gYWRkcmVzczogYWNjb3VudAoJYm94X2dldAoJYXNzZXJ0CglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWZyYW1lX2RpZyAtMSAvLyBuYW1lOiBieXRlcwoJPT0KCWFzc2VydAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoKcm91dGVfYWJpOgoJbWV0aG9kICJzZXRNeUNvbnRhY3Qoc3RyaW5nLHN0cmluZyl2b2lkIgoJbWV0aG9kICJhZGRDb250YWN0KHN0cmluZyxzdHJpbmcsYWNjb3VudCl2b2lkIgoJbWV0aG9kICJ1cGRhdGVDb250YWN0RmllbGQoc3RyaW5nLHN0cmluZyxhY2NvdW50KXZvaWQiCgltZXRob2QgInZlcmlmeUNvbnRhY3ROYW1lKHN0cmluZyxhY2NvdW50KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfc2V0TXlDb250YWN0IGFiaV9yb3V0ZV9hZGRDb250YWN0IGFiaV9yb3V0ZV91cGRhdGVDb250YWN0RmllbGQgYWJpX3JvdXRlX3ZlcmlmeUNvbnRhY3ROYW1l","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"ContactsApp","desc":"","methods":[{"name":"setMyContact","args":[{"name":"name","type":"string","desc":""},{"name":"company","type":"string","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"addContact","args":[{"name":"name","type":"string","desc":""},{"name":"company","type":"string","desc":""},{"name":"address","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"updateContactField","args":[{"name":"field","type":"string","desc":""},{"name":"value","type":"string","desc":""},{"name":"address","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"verifyContactName","args":[{"name":"name","type":"string","desc":""},{"name":"address","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "setMyContact(string,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "addContact(string,string,address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "updateContactField(string,string,address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "verifyContactName(string,address)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": { + "myContact": { + "type": "bytes", + "key": "myContact" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDMgMQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gaGVhZCBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQgb2YgZWxlbWVudAoJaW50IDAKCXN3YXAKCWV4dHJhY3QzIC8vIGV4dHJhY3QgcG9ydGlvbiBvZiB0dXBsZSBiZWZvcmUgZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIG5ldyB0dXBsZSBlbGVtZW50Cgljb25jYXQKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0xIC8vIGhlYWQgb2Zmc2V0CglleHRyYWN0X3VpbnQxNiAvLyBleHRyYWN0IGR5bmFtaWMgYXJyYXkgb2Zmc2V0IG9mIGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCSsKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsZW4KCXN1YnN0cmluZzMKCWNvbmNhdAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCTwKCWJueiBzd2FwcGVkX2RpZmZlcmVuY2UKCWZyYW1lX2RpZyAtMiAvLyBuZXcgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBuZXcgZWxlbWVudAoJZnJhbWVfZGlnIC0zIC8vIG9sZCBlbGVtZW50IGxlbmd0aAoJaW50IDEKCXN0b3JlIDcgLy8gc3VidHJhY3QgaGVhZCBkaWZmZXJlbmNlCgliIGdldF9kaWZmZXJlbmNlCgpzd2FwcGVkX2RpZmZlcmVuY2U6CglmcmFtZV9kaWcgLTMgLy8gb2xkIGVsZW1lbnQgbGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWludCAwCglzdG9yZSA3IC8vIHN1YnRyYWN0IGhlYWQgZGlmZmVyZW5jZQoKZ2V0X2RpZmZlcmVuY2U6CgktIC8vIGdldCBsZW5ndGggZGlmZmVyZW5jZQoJcmV0c3ViCgp1cGRhdGVfZHluYW1pY19oZWFkOgoJcHJvdG8gMiAwCglmcmFtZV9kaWcgLTIgLy8gbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gZHluYW1pYyBhcnJheSBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQKCWxvYWQgNyAvLyBzdWJ0cmFjdCBoZWFkIGRpZmZlcmVuY2UKCWJ6IHN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZQoJKyAvLyBhZGQgZGlmZmVyZW5jZSB0byBvZmZzZXQKCWIgZW5kX2NhbGNfbmV3X2hlYWQKCnN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZToKCXN3YXAKCS0gLy8gc3VidHJhY3QgZGlmZmVyZW5jZSBmcm9tIG9mZmV0CgplbmRfY2FsY19uZXdfaGVhZDoKCWl0b2IgLy8gY29udmVydCB0byBieXRlcwoJZXh0cmFjdCA2IDIgLy8gY29udmVydCB0byB1aW50MTYKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglzd2FwCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0Cglzd2FwCglyZXBsYWNlMyAvLyB1cGRhdGUgb2Zmc2V0CglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCXJldHN1YgoKcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJZHVwCglsZW4KCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2J1cnkgLTIgLy8gaGVhZCBvZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKYWJpX3JvdXRlX3NldE15Q29udGFjdDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZXh0cmFjdCAyIDAKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWV4dHJhY3QgMiAwCgljYWxsc3ViIHNldE15Q29udGFjdAoJaW50IDEKCXJldHVybgoKc2V0TXlDb250YWN0OgoJcHJvdG8gMyAwCgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjEyCgkvLyBjb250YWN0OiBDb250YWN0ID0geyBuYW1lOiBuYW1lLCBjb21wYW55OiBjb21wYW55IH0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIGNvbXBhbnk6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0zIC8vIGNvbnRhY3Q6IENvbnRhY3QKCgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MTQKCS8vIHRoaXMubXlDb250YWN0LnB1dChjb250YWN0KQoJYnl0ZSAibXlDb250YWN0IgoJZnJhbWVfZGlnIC0zIC8vIGNvbnRhY3Q6IENvbnRhY3QKCWFwcF9nbG9iYWxfcHV0CgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjE1CgkvLyB0aGlzLmNvbnRhY3RzLnB1dCh0aGlzLnR4bi5zZW5kZXIsIGNvbnRhY3QpCgl0eG4gU2VuZGVyCglkdXAKCWJveF9kZWwKCXBvcAoJZnJhbWVfZGlnIC0zIC8vIGNvbnRhY3Q6IENvbnRhY3QKCWJveF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2FkZENvbnRhY3Q6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWV4dHJhY3QgMiAwCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoJY2FsbHN1YiBhZGRDb250YWN0CglpbnQgMQoJcmV0dXJuCgphZGRDb250YWN0OgoJcHJvdG8gNCAwCgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjE5CgkvLyBjb250YWN0OiBDb250YWN0ID0geyBuYW1lOiBuYW1lLCBjb21wYW55OiBjb21wYW55IH0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIGNvbXBhbnk6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC00IC8vIGNvbnRhY3Q6IENvbnRhY3QKCgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MjAKCS8vIHRoaXMuY29udGFjdHMucHV0KGFkZHJlc3MsIGNvbnRhY3QpCglmcmFtZV9kaWcgLTMgLy8gYWRkcmVzczogYWRkcmVzcwoJZHVwCglib3hfZGVsCglwb3AKCWZyYW1lX2RpZyAtNCAvLyBjb250YWN0OiBDb250YWN0Cglib3hfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVDb250YWN0RmllbGQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWV4dHJhY3QgMiAwCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglleHRyYWN0IDIgMAoJY2FsbHN1YiB1cGRhdGVDb250YWN0RmllbGQKCWludCAxCglyZXR1cm4KCnVwZGF0ZUNvbnRhY3RGaWVsZDoKCXByb3RvIDMgMAoKCS8vIGlmMF9jb25kaXRpb24KCS8vIGV4YW1wbGVzL3R1cGxlX2luX2JveC9hcHAuYWxnby50czoyNAoJLy8gZmllbGQgPT09ICduYW1lJwoJZnJhbWVfZGlnIC0xIC8vIGZpZWxkOiBieXRlcwoJYnl0ZSAibmFtZSIKCT09CglieiBpZjBfZWxzZWlmMV9jb25kaXRpb24KCgkvLyBpZjBfY29uc2VxdWVudAoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjI1CgkvLyB0aGlzLmNvbnRhY3RzLmdldChhZGRyZXNzKS5uYW1lID0gdmFsdWUKCS8vIGV4YW1wbGVzL3R1cGxlX2luX2JveC9hcHAuYWxnby50czoxCgkvLyB0aGlzLmNvbnRhY3RzLmdldChhZGRyZXNzKQoJZnJhbWVfZGlnIC0zIC8vIGFkZHJlc3M6IGFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAwCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWZyYW1lX2RpZyAtMiAvLyB2YWx1ZTogYnl0ZXMKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglpbnQgMAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0zIC8vIGFkZHJlc3M6IGFkZHJlc3MKCWR1cAoJYm94X2RlbAoJcG9wCglzd2FwCglib3hfcHV0CgliIGlmMF9lbmQKCmlmMF9lbHNlaWYxX2NvbmRpdGlvbjoKCS8vIGV4YW1wbGVzL3R1cGxlX2luX2JveC9hcHAuYWxnby50czoyNgoJLy8gZmllbGQgPT09ICdjb21wYW55JwoJZnJhbWVfZGlnIC0xIC8vIGZpZWxkOiBieXRlcwoJYnl0ZSAiY29tcGFueSIKCT09CglieiBpZjBfZWxzZQoKCS8vIGlmMF9lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIGV4YW1wbGVzL3R1cGxlX2luX2JveC9hcHAuYWxnby50czoyNwoJLy8gdGhpcy5jb250YWN0cy5nZXQoYWRkcmVzcykuY29tcGFueSA9IHZhbHVlCgkvLyBleGFtcGxlcy90dXBsZV9pbl9ib3gvYXBwLmFsZ28udHM6MQoJLy8gdGhpcy5jb250YWN0cy5nZXQoYWRkcmVzcykKCWZyYW1lX2RpZyAtMyAvLyBhZGRyZXNzOiBhZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglmcmFtZV9kaWcgLTIgLy8gdmFsdWU6IGJ5dGVzCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMyAvLyBhZGRyZXNzOiBhZGRyZXNzCglkdXAKCWJveF9kZWwKCXBvcAoJc3dhcAoJYm94X3B1dAoJYiBpZjBfZW5kCgppZjBfZWxzZToKCWVyciAvLyAnSW52YWxpZCBmaWVsZCcKCmlmMF9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV92ZXJpZnlDb250YWN0TmFtZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgdmVyaWZ5Q29udGFjdE5hbWUKCWludCAxCglyZXR1cm4KCnZlcmlmeUNvbnRhY3ROYW1lOgoJcHJvdG8gMiAwCgoJLy8gZXhhbXBsZXMvdHVwbGVfaW5fYm94L2FwcC5hbGdvLnRzOjMyCgkvLyBhc3NlcnQodGhpcy5jb250YWN0cy5nZXQoYWRkcmVzcykubmFtZSA9PT0gbmFtZSkKCWZyYW1lX2RpZyAtMiAvLyBhZGRyZXNzOiBhZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2RpZyAtMiAvLyBhZGRyZXNzOiBhZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZnJhbWVfZGlnIC0xIC8vIG5hbWU6IGJ5dGVzCgk9PQoJYXNzZXJ0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoKCS8vIGRlZmF1bHQgY3JlYXRlQXBwbGljYXRpb24KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJJiYKCXJldHVybgoKcm91dGVfYWJpOgoJbWV0aG9kICJzZXRNeUNvbnRhY3Qoc3RyaW5nLHN0cmluZyl2b2lkIgoJbWV0aG9kICJhZGRDb250YWN0KHN0cmluZyxzdHJpbmcsYWRkcmVzcyl2b2lkIgoJbWV0aG9kICJ1cGRhdGVDb250YWN0RmllbGQoc3RyaW5nLHN0cmluZyxhZGRyZXNzKXZvaWQiCgltZXRob2QgInZlcmlmeUNvbnRhY3ROYW1lKHN0cmluZyxhZGRyZXNzKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfc2V0TXlDb250YWN0IGFiaV9yb3V0ZV9hZGRDb250YWN0IGFiaV9yb3V0ZV91cGRhdGVDb250YWN0RmllbGQgYWJpX3JvdXRlX3ZlcmlmeUNvbnRhY3ROYW1l", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "ContactsApp", + "desc": "", + "methods": [ + { + "name": "setMyContact", + "args": [ + { + "name": "name", + "type": "string", + "desc": "" + }, + { + "name": "company", + "type": "string", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "addContact", + "args": [ + { + "name": "name", + "type": "string", + "desc": "" + }, + { + "name": "company", + "type": "string", + "desc": "" + }, + { + "name": "address", + "type": "address", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "updateContactField", + "args": [ + { + "name": "field", + "type": "string", + "desc": "" + }, + { + "name": "value", + "type": "string", + "desc": "" + }, + { + "name": "address", + "type": "address", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "verifyContactName", + "args": [ + { + "name": "name", + "type": "string", + "desc": "" + }, + { + "name": "address", + "type": "address", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.src_map.json b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.src_map.json index ed22a252c..609d01374 100644 --- a/examples/tuple_in_box/tealscript_artifacts/ContactsApp.src_map.json +++ b/examples/tuple_in_box/tealscript_artifacts/ContactsApp.src_map.json @@ -114,590 +114,488 @@ "112": 72, "113": 75, "114": 75, - "115": 76, - "116": 77, - "117": 78, - "118": 78, - "119": 79, - "120": 80, - "121": 81, - "122": 82, - "123": 83, - "124": 83, - "125": 83, - "126": 84, - "127": 85, - "128": 88, - "129": 88, - "130": 88, - "131": 89, - "132": 92, - "133": 92, - "134": 93, - "135": 94, - "136": 95, - "137": 95, - "138": 96, - "139": 97, - "140": 98, - "141": 99, - "142": 100, - "143": 101, - "144": 101, - "145": 101, - "146": 102, - "147": 102, - "148": 102, - "149": 103, - "150": 103, - "151": 103, - "152": 104, - "153": 104, - "154": 104, - "155": 105, - "156": 105, - "157": 105, - "158": 106, - "159": 107, - "160": 110, - "161": 110, - "162": 110, - "163": 114, - "164": 115, - "165": 116, - "166": 116, - "167": 117, - "168": 117, - "169": 118, - "170": 119, - "171": 119, - "172": 120, - "173": 120, - "174": 121, - "175": 121, - "176": 122, - "177": 123, - "178": 123, - "179": 124, - "180": 124, - "181": 125, - "182": 126, - "183": 127, - "184": 128, - "185": 128, - "186": 128, - "187": 129, - "188": 130, - "189": 131, - "190": 132, - "191": 133, - "192": 133, - "193": 134, - "194": 135, - "195": 136, - "196": 137, - "197": 137, - "198": 137, - "199": 138, - "200": 138, - "201": 139, - "202": 139, - "203": 140, - "204": 141, - "205": 142, - "206": 142, - "207": 143, - "208": 143, - "209": 144, - "210": 144, - "211": 145, - "212": 146, - "213": 146, - "214": 147, - "215": 147, - "216": 148, - "217": 149, - "218": 150, - "219": 151, - "220": 151, - "221": 151, - "222": 152, - "223": 153, - "224": 154, - "225": 155, - "226": 156, - "227": 156, - "228": 157, - "229": 158, - "230": 159, - "231": 160, - "232": 160, - "233": 160, - "234": 161, - "235": 161, - "236": 162, - "237": 162, - "238": 163, - "239": 164, - "240": 165, - "241": 165, - "242": 166, - "243": 166, - "244": 167, + "115": 75, + "116": 76, + "117": 76, + "118": 77, + "119": 77, + "120": 78, + "121": 79, + "122": 79, + "123": 80, + "124": 80, + "125": 81, + "126": 82, + "127": 83, + "128": 83, + "129": 84, + "130": 85, + "131": 86, + "132": 87, + "133": 87, + "134": 87, + "135": 88, + "136": 88, + "137": 89, + "138": 89, + "139": 90, + "140": 91, + "141": 92, + "142": 92, + "143": 93, + "144": 93, + "145": 94, + "146": 94, + "147": 95, + "148": 95, + "149": 96, + "150": 99, + "151": 99, + "152": 100, + "153": 101, + "154": 102, + "155": 102, + "156": 103, + "157": 104, + "158": 105, + "159": 106, + "160": 107, + "161": 108, + "162": 108, + "163": 108, + "164": 109, + "165": 109, + "166": 109, + "167": 110, + "168": 110, + "169": 110, + "170": 111, + "171": 111, + "172": 111, + "173": 112, + "174": 112, + "175": 112, + "176": 113, + "177": 114, + "178": 117, + "179": 117, + "180": 117, + "181": 121, + "182": 122, + "183": 123, + "184": 124, + "185": 124, + "186": 125, + "187": 126, + "188": 127, + "189": 128, + "190": 128, + "191": 128, + "192": 129, + "193": 130, + "194": 131, + "195": 131, + "196": 131, + "197": 132, + "198": 132, + "199": 133, + "200": 134, + "201": 135, + "202": 136, + "203": 136, + "204": 136, + "205": 137, + "206": 138, + "207": 139, + "208": 139, + "209": 139, + "210": 140, + "211": 141, + "212": 142, + "213": 142, + "214": 146, + "215": 146, + "216": 146, + "217": 146, + "218": 146, + "219": 146, + "220": 146, + "221": 146, + "222": 146, + "223": 146, + "224": 146, + "225": 147, + "226": 147, + "227": 148, + "228": 152, + "229": 152, + "230": 153, + "231": 154, + "232": 155, + "233": 156, + "234": 156, + "235": 157, + "236": 158, + "237": 161, + "238": 161, + "239": 162, + "240": 163, + "241": 164, + "242": 164, + "243": 165, + "244": 166, "245": 167, "246": 168, "247": 169, - "248": 169, - "249": 173, - "250": 173, - "251": 173, - "252": 173, - "253": 173, - "254": 173, - "255": 173, - "256": 173, + "248": 170, + "249": 170, + "250": 170, + "251": 171, + "252": 171, + "253": 171, + "254": 172, + "255": 172, + "256": 172, "257": 173, "258": 173, "259": 173, "260": 174, "261": 174, - "262": 175, - "263": 179, - "264": 179, - "265": 180, - "266": 181, - "267": 182, - "268": 183, - "269": 183, - "270": 184, - "271": 185, - "272": 188, - "273": 188, - "274": 189, - "275": 190, - "276": 191, - "277": 191, - "278": 192, - "279": 193, - "280": 194, - "281": 195, - "282": 196, - "283": 197, - "284": 197, - "285": 197, - "286": 198, - "287": 199, - "288": 199, - "289": 200, - "290": 200, - "291": 200, - "292": 201, - "293": 201, - "294": 201, - "295": 202, - "296": 202, + "262": 174, + "263": 175, + "264": 175, + "265": 175, + "266": 176, + "267": 177, + "268": 180, + "269": 180, + "270": 180, + "271": 184, + "272": 185, + "273": 186, + "274": 187, + "275": 187, + "276": 188, + "277": 189, + "278": 190, + "279": 191, + "280": 191, + "281": 191, + "282": 192, + "283": 193, + "284": 194, + "285": 194, + "286": 194, + "287": 195, + "288": 195, + "289": 196, + "290": 197, + "291": 198, + "292": 199, + "293": 199, + "294": 199, + "295": 200, + "296": 201, "297": 202, - "298": 203, - "299": 203, + "298": 202, + "299": 202, "300": 203, "301": 204, - "302": 204, - "303": 204, - "304": 205, - "305": 206, - "306": 209, - "307": 209, - "308": 209, + "302": 205, + "303": 205, + "304": 209, + "305": 209, + "306": 210, + "307": 211, + "308": 212, "309": 213, - "310": 214, - "311": 215, + "310": 213, + "311": 214, "312": 215, - "313": 216, - "314": 216, - "315": 217, - "316": 218, - "317": 218, - "318": 219, - "319": 219, - "320": 220, - "321": 220, - "322": 221, - "323": 222, - "324": 222, - "325": 223, - "326": 223, - "327": 224, - "328": 225, - "329": 226, - "330": 227, - "331": 227, - "332": 227, - "333": 228, + "313": 218, + "314": 218, + "315": 219, + "316": 220, + "317": 221, + "318": 221, + "319": 222, + "320": 223, + "321": 224, + "322": 225, + "323": 226, + "324": 226, + "325": 226, + "326": 227, + "327": 227, + "328": 227, + "329": 228, + "330": 228, + "331": 228, + "332": 229, + "333": 229, "334": 229, "335": 230, - "336": 231, - "337": 232, - "338": 232, - "339": 233, - "340": 234, - "341": 235, - "342": 236, + "336": 230, + "337": 230, + "338": 231, + "339": 231, + "340": 231, + "341": 232, + "342": 233, "343": 236, "344": 236, - "345": 237, - "346": 237, - "347": 238, - "348": 238, - "349": 239, - "350": 240, - "351": 241, - "352": 241, + "345": 236, + "346": 241, + "347": 241, + "348": 242, + "349": 242, + "350": 242, + "351": 242, + "352": 242, "353": 242, - "354": 242, - "355": 243, - "356": 243, + "354": 243, + "355": 244, + "356": 244, "357": 244, - "358": 245, - "359": 245, - "360": 246, - "361": 246, - "362": 247, - "363": 248, - "364": 249, - "365": 250, - "366": 250, - "367": 250, - "368": 251, - "369": 252, - "370": 253, - "371": 254, - "372": 255, - "373": 255, - "374": 256, - "375": 257, - "376": 258, - "377": 259, - "378": 259, - "379": 259, - "380": 260, - "381": 260, - "382": 261, - "383": 261, - "384": 262, - "385": 263, - "386": 264, - "387": 264, - "388": 265, - "389": 265, - "390": 266, - "391": 266, - "392": 267, - "393": 268, - "394": 268, - "395": 272, - "396": 272, - "397": 273, - "398": 274, - "399": 275, - "400": 276, - "401": 276, - "402": 277, - "403": 278, - "404": 281, - "405": 281, - "406": 282, - "407": 283, - "408": 284, - "409": 284, - "410": 285, - "411": 286, - "412": 287, - "413": 288, - "414": 289, - "415": 289, - "416": 289, - "417": 290, - "418": 291, - "419": 291, - "420": 292, - "421": 292, - "422": 292, - "423": 293, - "424": 293, - "425": 293, - "426": 294, - "427": 294, - "428": 294, - "429": 295, - "430": 295, - "431": 295, - "432": 296, - "433": 296, - "434": 296, - "435": 297, - "436": 298, - "437": 301, - "438": 301, - "439": 301, - "440": 306, - "441": 306, - "442": 307, - "443": 307, - "444": 307, - "445": 307, - "446": 307, - "447": 307, - "448": 308, - "449": 309, - "450": 309, - "451": 309, - "452": 316, - "453": 316, - "454": 317, - "455": 318, - "456": 319, - "457": 320, - "458": 320, - "459": 321, - "460": 322, - "461": 323, - "462": 323, - "463": 324, - "464": 324, - "465": 325, - "466": 326, - "467": 327, - "468": 328, - "469": 329, - "470": 329, - "471": 330, - "472": 331, - "473": 332, - "474": 333, - "475": 334, - "476": 335, - "477": 336, - "478": 337, - "479": 338, - "480": 338, - "481": 339, - "482": 339, - "483": 340, - "484": 341, - "485": 341, - "486": 342, - "487": 343, - "488": 344, - "489": 345, - "490": 345, - "491": 345, - "492": 346, - "493": 347, - "494": 348, - "495": 349, - "496": 349, - "497": 349, - "498": 350, - "499": 351, - "500": 352, - "501": 352, - "502": 352, - "503": 353, - "504": 354, - "505": 354, - "506": 355, - "507": 355, - "508": 356, - "509": 357, - "510": 358, - "511": 359, - "512": 360, - "513": 361, - "514": 361, - "515": 361, - "516": 366, - "517": 366, - "518": 367, - "519": 367, - "520": 367, - "521": 367, - "522": 367, - "523": 367, - "524": 367, - "525": 367, - "526": 367, - "527": 368, - "528": 369, - "529": 369, - "530": 369, - "531": 376, - "532": 376, - "533": 377, - "534": 378, - "535": 379, - "536": 380, - "537": 380, - "538": 381, - "539": 382, - "540": 383, - "541": 383, - "542": 384, - "543": 384, - "544": 385, - "545": 386, - "546": 387, - "547": 388, - "548": 389, - "549": 389, - "550": 390, - "551": 391, - "552": 392, - "553": 393, - "554": 394, - "555": 395, - "556": 396, - "557": 397, - "558": 398, - "559": 398, - "560": 399, - "561": 399, - "562": 400, - "563": 401, - "564": 401, - "565": 402, - "566": 403, - "567": 404, - "568": 405, - "569": 405, - "570": 405, - "571": 406, - "572": 407, - "573": 408, - "574": 409, - "575": 409, - "576": 409, - "577": 410, - "578": 411, - "579": 411, - "580": 412, - "581": 412, - "582": 413, - "583": 414, - "584": 415, - "585": 416, - "586": 417, - "587": 418, - "588": 418, - "589": 418, - "590": 421, - "591": 424, + "358": 251, + "359": 251, + "360": 252, + "361": 253, + "362": 254, + "363": 255, + "364": 255, + "365": 256, + "366": 257, + "367": 258, + "368": 258, + "369": 259, + "370": 259, + "371": 260, + "372": 261, + "373": 262, + "374": 263, + "375": 264, + "376": 264, + "377": 265, + "378": 266, + "379": 267, + "380": 268, + "381": 269, + "382": 270, + "383": 271, + "384": 272, + "385": 273, + "386": 274, + "387": 274, + "388": 275, + "389": 276, + "390": 277, + "391": 278, + "392": 278, + "393": 278, + "394": 279, + "395": 280, + "396": 281, + "397": 282, + "398": 282, + "399": 282, + "400": 283, + "401": 284, + "402": 285, + "403": 285, + "404": 285, + "405": 286, + "406": 287, + "407": 287, + "408": 288, + "409": 288, + "410": 289, + "411": 290, + "412": 291, + "413": 292, + "414": 293, + "415": 294, + "416": 294, + "417": 294, + "418": 299, + "419": 299, + "420": 300, + "421": 300, + "422": 300, + "423": 300, + "424": 300, + "425": 300, + "426": 300, + "427": 300, + "428": 300, + "429": 301, + "430": 302, + "431": 302, + "432": 302, + "433": 309, + "434": 309, + "435": 310, + "436": 311, + "437": 312, + "438": 313, + "439": 313, + "440": 314, + "441": 315, + "442": 316, + "443": 316, + "444": 317, + "445": 317, + "446": 318, + "447": 319, + "448": 320, + "449": 321, + "450": 322, + "451": 322, + "452": 323, + "453": 324, + "454": 325, + "455": 326, + "456": 327, + "457": 328, + "458": 329, + "459": 330, + "460": 331, + "461": 332, + "462": 332, + "463": 333, + "464": 334, + "465": 335, + "466": 336, + "467": 336, + "468": 336, + "469": 337, + "470": 338, + "471": 339, + "472": 340, + "473": 340, + "474": 340, + "475": 341, + "476": 342, + "477": 342, + "478": 343, + "479": 343, + "480": 344, + "481": 345, + "482": 346, + "483": 347, + "484": 348, + "485": 349, + "486": 349, + "487": 349, + "488": 352, + "489": 355, + "490": 358, + "491": 358, + "492": 359, + "493": 360, + "494": 361, + "495": 361, + "496": 362, + "497": 363, + "498": 364, + "499": 365, + "500": 366, + "501": 366, + "502": 366, + "503": 367, + "504": 367, + "505": 367, + "506": 368, + "507": 368, + "508": 368, + "509": 369, + "510": 369, + "511": 369, + "512": 370, + "513": 371, + "514": 374, + "515": 374, + "516": 374, + "517": 378, + "518": 378, + "519": 379, + "520": 380, + "521": 381, + "522": 381, + "523": 382, + "524": 383, + "525": 384, + "526": 385, + "527": 385, + "528": 386, + "529": 387, + "530": 388, + "531": 388, + "532": 389, + "533": 389, + "534": 390, + "535": 391, + "536": 392, + "537": 393, + "538": 394, + "539": 394, + "540": 395, + "541": 396, + "542": 397, + "543": 398, + "544": 399, + "545": 400, + "546": 401, + "547": 402, + "548": 403, + "549": 403, + "550": 403, + "551": 404, + "552": 404, + "553": 405, + "554": 406, + "555": 407, + "556": 410, + "557": 410, + "558": 411, + "559": 411, + "560": 411, + "561": 414, + "562": 414, + "563": 415, + "564": 416, + "565": 417, + "566": 417, + "567": 418, + "568": 419, + "569": 420, + "570": 421, + "571": 424, + "572": 424, + "573": 424, + "574": 424, + "575": 424, + "576": 424, + "577": 425, + "578": 425, + "579": 425, + "580": 425, + "581": 425, + "582": 425, + "583": 426, + "584": 426, + "585": 426, + "586": 426, + "587": 426, + "588": 426, + "589": 427, + "590": 427, + "591": 427, "592": 427, "593": 427, - "594": 428, - "595": 429, - "596": 430, - "597": 430, - "598": 431, - "599": 432, - "600": 433, - "601": 434, - "602": 435, - "603": 435, - "604": 435, - "605": 436, - "606": 437, - "607": 437, - "608": 438, - "609": 438, - "610": 438, - "611": 439, - "612": 439, - "613": 439, - "614": 440, - "615": 440, - "616": 440, - "617": 441, - "618": 442, - "619": 445, - "620": 445, - "621": 445, - "622": 449, - "623": 449, - "624": 450, - "625": 451, - "626": 452, - "627": 452, - "628": 453, - "629": 454, - "630": 455, - "631": 456, - "632": 456, - "633": 457, - "634": 458, - "635": 459, - "636": 459, - "637": 460, - "638": 460, - "639": 461, - "640": 462, - "641": 463, - "642": 464, - "643": 465, - "644": 465, - "645": 466, - "646": 467, - "647": 468, - "648": 469, - "649": 470, - "650": 471, - "651": 472, - "652": 473, - "653": 474, - "654": 474, - "655": 474, - "656": 475, - "657": 475, - "658": 476, - "659": 477, - "660": 478, - "661": 481, - "662": 481, - "663": 482, - "664": 482, - "665": 482, - "666": 483, - "667": 483, - "668": 484, - "669": 485, - "670": 486, - "671": 486, - "672": 486, - "673": 489, - "674": 489, - "675": 489, - "676": 489, - "677": 489, - "678": 489, - "679": 490, - "680": 490, - "681": 490, - "682": 490, - "683": 490, - "684": 490, - "685": 491, - "686": 491, - "687": 491, - "688": 491, - "689": 491, - "690": 491, - "691": 492, - "692": 492, - "693": 492, - "694": 492, - "695": 492, - "696": 492, - "697": 493, - "698": 493, - "699": 493, - "700": 494 + "594": 427, + "595": 428, + "596": 428, + "597": 428, + "598": 429 } \ No newline at end of file diff --git a/package.json b/package.json index c460bf796..8fac519ec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@algorandfoundation/tealscript", - "version": "0.11.0", + "version": "0.12.0", "description": "Enables Algorand smart contract development with native TypeScript syntax, tooling, and IDE support", "homepage": "https://github.com/algorand-devrel/TEALScript", "bugs": { diff --git a/src/bin/tealscript.ts b/src/bin/tealscript.ts index 75e6b94dc..80c68c5e2 100644 --- a/src/bin/tealscript.ts +++ b/src/bin/tealscript.ts @@ -38,6 +38,6 @@ src.statements.forEach(async (body) => { fs.writeFileSync(clearTealPath, compiler.clearProgram()); fs.writeFileSync(abiPath, JSON.stringify(compiler.abi, null, 2)); fs.writeFileSync(srcmapPath, JSON.stringify(compiler.pcToLine, null, 2)); - fs.writeFileSync(appPath, JSON.stringify(compiler.appSpec())); + fs.writeFileSync(appPath, JSON.stringify(compiler.appSpec(), null, 2)); } }); diff --git a/src/lib/compiler.ts b/src/lib/compiler.ts index 235e82748..8badf1f91 100644 --- a/src/lib/compiler.ts +++ b/src/lib/compiler.ts @@ -168,11 +168,7 @@ function isRefType(t: string): boolean { } const scratch = { - tupleHead: '0 // tuple head', - tupleTail: '1 // tuple tail', - headOffset: '2 // head offset', fullTuple: '3 // full tuple', - oldTupleElement: '4 // old tuple element', subtractHeadDifference: '7 // subtract head difference', spliceStart: '12 // splice start', spliceByteLength: '13 // splice byte length', @@ -223,7 +219,7 @@ export default class Compiler { private bareCreate: boolean = false; - private handledActions: string[] = []; + private handledActions: {[method: string]: string[]} = {}; abi: { name: string, @@ -956,7 +952,7 @@ export default class Compiler { this.pushVoid('int 1'); this.pushVoid(`match ${this.bareOnCompletes.map((oc) => `bare_route_${oc}`).join(' ')}`); - } else if (!this.handledActions.includes('createApplication')) { + } else if (!Object.values(this.handledActions).flat().includes('createApplication')) { this.pushLines( '// default createApplication', 'txn ApplicationID', @@ -1195,58 +1191,36 @@ export default class Compiler { return sum + length; }, 0); - this.pushLines( - 'byte 0x', - 'dup', - `store ${scratch.tupleHead}`, - `store ${scratch.tupleTail}`, - `byte 0x${headLength.toString(16).padStart(4, '0')}`, - `store ${scratch.headOffset}`, - ); - node.elements.forEach((e, i) => { this.typeHint = types[i]; - this.pushLines(`load ${scratch.tupleHead}`); - if (this.isDynamicType(types[i])) { - this.pushLines(`load ${scratch.headOffset}`, 'concat', `store ${scratch.tupleHead}`); - this.processNode(e); + if (i === 0) { + this.pushLines('byte 0x // initial head', 'byte 0x // initial tail', `byte 0x${headLength.toString(16).padStart(4, '0')} // initial head offset`); + } - if (types[i] === 'bytes' || types[i] === 'string') { - this.pushLines( - 'dup', - 'len', - 'itob', - 'extract 6 2', - 'swap', - 'concat', - ); - } + this.processNode(e); + if (types[i] === 'bytes' || types[i] === 'string') { this.pushLines( 'dup', 'len', - `load ${scratch.headOffset}`, - 'btoi', - '+', 'itob', 'extract 6 2', - `store ${scratch.headOffset}`, - `load ${scratch.tupleTail}`, 'swap', 'concat', - `store ${scratch.tupleTail}`, ); - } else { - this.processNode(e); + } + if (isNumeric(this.lastType)) this.pushVoid('itob'); + if (this.lastType.match(/uint\d+$/) && this.lastType !== types[i]) this.fixBitWidth(parseInt(types[i].match(/\d+$/)![0], 10), !ts.isNumericLiteral(e)); - if (isNumeric(this.lastType)) this.pushVoid('itob'); - if (this.lastType.match(/uint\d+$/) && this.lastType !== types[i]) this.fixBitWidth(parseInt(types[i].match(/\d+$/)![0], 10), !ts.isNumericLiteral(e)); - this.pushLines('concat', `store ${scratch.tupleHead}`); + if (this.isDynamicType(types[i])) { + this.pushVoid('callsub process_dynamic_tuple_element'); + } else { + this.pushVoid('callsub process_static_tuple_element'); } }); - this.pushLines(`load ${scratch.tupleHead}`, `load ${scratch.tupleTail}`, 'concat'); + this.pushLines('pop // pop head offset', 'concat // concat head and tail'); } private processArrayLiteralExpression(node: ts.ArrayLiteralExpression) { @@ -1315,6 +1289,57 @@ export default class Compiler { private compilerSubroutines: {[name: string]: () => string[]} = { + process_static_tuple_element: () => { + const tupleHead = '-4 // tuple head'; + const tupleTail = '-3 // tuple tail'; + const headOffset = '-2 // head offset'; + const element = '-1 // element'; + + return [ + 'process_static_tuple_element:', + 'proto 4 3', + `frame_dig ${tupleHead}`, + `frame_dig ${element}`, + 'concat', + + `frame_dig ${tupleTail}`, + `frame_dig ${headOffset}`, + 'retsub', + ]; + }, + + process_dynamic_tuple_element: () => { + const tupleHead = '-4 // tuple head'; + const tupleTail = '-3 // tuple tail'; + const headOffset = '-2 // head offset'; + const element = '-1 // element'; + + return [ + 'process_dynamic_tuple_element:', + 'proto 4 3', + `frame_dig ${tupleHead}`, + `frame_dig ${headOffset}`, 'concat', `frame_bury ${tupleHead}`, + `frame_dig ${element}`, + 'dup', + 'len', + `frame_dig ${headOffset}`, + 'btoi', + '+', + 'itob', + 'extract 6 2', + `frame_bury ${headOffset}`, + `frame_dig ${tupleTail}`, + 'swap', + 'concat', + `frame_bury ${tupleTail}`, + + `frame_dig ${tupleHead}`, + `frame_dig ${tupleTail}`, + `frame_dig ${headOffset}`, + 'retsub', + ]; + }, + // -2: length difference // -1: offset update_dynamic_head: () => [ @@ -1417,13 +1442,7 @@ export default class Compiler { ) { // Get old element this.extractDynamicTupleElement(elementType); - this.pushLines(`store ${scratch.oldTupleElement}`); - - // Get old element length - this.pushLines( - `load ${scratch.oldTupleElement}`, - 'len // length of old element', - ); + this.pushLines('len // length of old element'); // Get new element this.processNode(newValue); @@ -1616,6 +1635,7 @@ export default class Compiler { return; } + this.handledActions[this.currentSubroutine.name] = []; this.currentSubroutine.decorators = (ts.getDecorators(node) || []).map( (d) => { const err = new Error(`Unknown decorator ${d.expression.getText()}`); @@ -1623,9 +1643,9 @@ export default class Compiler { if (d.expression.expression.getText() !== 'handle') throw err; const handledAction = d.expression.name.getText(); - if (this.handledActions.includes(handledAction)) throw new Error(`Action ${handledAction} is already handled by another method`); + if (Object.values(this.handledActions).flat().includes(handledAction)) throw new Error(`Action ${handledAction} is already handled by another method`); - this.handledActions.push(handledAction); + this.handledActions[this.currentSubroutine.name].push(handledAction); return handledAction; }, ); @@ -2844,8 +2864,12 @@ export default class Compiler { } } - return { - hints: {}, + const hints: {[signature: string]: {'call_config': {[action: string]: string}}} = {}; + const bareCallConfig: {[action: string]: string} = {}; + + const appSpec = { + hints, + bare_call_config: bareCallConfig, schema: { local: { declared: localDeclared, reserved: {} }, global: { declared: globalDeclared, reserved: {} }, @@ -2854,6 +2878,33 @@ export default class Compiler { source: { approval, clear }, contract: this.abi, }; + + this.abi.methods.forEach((m) => { + const signature = `${m.name}(${m.args.map((a) => a.type).join(',')})${m.returns.type}`; + + hints[signature] = { + call_config: {}, + }; + + if (this.handledActions[m.name].length === 0) { + hints[signature].call_config.no_op = 'CALL'; + } else { + this.handledActions[m.name].forEach((a) => { + hints[signature].call_config[a] = 'CALL'; + }); + } + }); + + this.bareOnCompletes.forEach((oc) => { + if (oc === 'DeleteApplication') bareCallConfig.delete_application = 'CALL'; + if (oc === 'UpdateApplication') bareCallConfig.update_application = 'CALL'; + if (oc === 'CloseOut') bareCallConfig.close_out = 'CALL'; + if (oc === 'OptIn') bareCallConfig.opt_in = 'CALL'; + }); + + if (this.bareCreate) bareCallConfig.no_op = 'CREATE'; + + return appSpec; } approvalProgram(): string { diff --git a/tests/contracts/AbiTest.approval.teal b/tests/contracts/AbiTest.approval.teal index e2cdc987d..753bfd58f 100644 --- a/tests/contracts/AbiTest.approval.teal +++ b/tests/contracts/AbiTest.approval.teal @@ -72,6 +72,39 @@ end_calc_new_head: store 3 // full tuple retsub +process_dynamic_tuple_element: + proto 4 3 + frame_dig -4 // tuple head + frame_dig -2 // head offset + concat + frame_bury -4 // tuple head + frame_dig -1 // element + dup + len + frame_dig -2 // head offset + btoi + + + itob + extract 6 2 + frame_bury -2 // head offset + frame_dig -3 // tuple tail + swap + concat + frame_bury -3 // tuple tail + frame_dig -4 // tuple head + frame_dig -3 // tuple tail + frame_dig -2 // head offset + retsub + +process_static_tuple_element: + proto 4 3 + frame_dig -4 // tuple head + frame_dig -1 // element + concat + frame_dig -3 // tuple tail + frame_dig -2 // head offset + retsub + bare_route_create: txn OnCompletion int NoOp @@ -1295,37 +1328,25 @@ simpleTuple: // tests/contracts/abi.algo.ts:182 // a: [uint64, uint16, uint64, uint16] = [11, 22, 33, 44] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0014 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0014 // initial head offset int 11 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 22 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 33 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 44 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint64,uint16,uint64,uint16] // tests/contracts/abi.algo.ts:184 @@ -1363,40 +1384,28 @@ arrayInTuple: // tests/contracts/abi.algo.ts:188 // a: [uint64, uint16, StaticArray, uint16] = [ - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x001c - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x001c // initial head offset int 11 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 22 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 33 itob int 44 itob concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 55 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint64,uint16,uint64[2],uint16] // tests/contracts/abi.algo.ts:192 @@ -1438,46 +1447,30 @@ tupleInArray: // tests/contracts/abi.algo.ts:196 // a: StaticArray<[uint64, uint16], 2> = [ - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 11 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 22 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 33 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 44 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail concat frame_bury -1 // a: [uint64,uint16][2] @@ -1520,73 +1513,45 @@ tupleInTuple: // tests/contracts/abi.algo.ts:204 // a: [uint16, uint16, [uint64, uint16], [uint16, uint64]] = [ - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0018 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0018 // initial head offset int 11 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 22 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 33 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 44 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - concat - store 0 // tuple head - load 0 // tuple head - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + callsub process_static_tuple_element + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 55 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 66 itob - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint16,[uint64,uint16],[uint16,uint64]] // tests/contracts/abi.algo.ts:208 @@ -1626,13 +1591,9 @@ shortTypeNotation: // tests/contracts/abi.algo.ts:212 // a: [uint16<2>, uint64<2>, uint16<2>] = [ - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0018 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0018 // initial head offset int 11 itob extract 6 0 @@ -1640,17 +1601,13 @@ shortTypeNotation: itob extract 6 0 concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 33 itob int 44 itob concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 55 itob extract 6 0 @@ -1658,11 +1615,9 @@ shortTypeNotation: itob extract 6 0 concat - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16[2],uint64[2],uint16[2]] // tests/contracts/abi.algo.ts:216 @@ -1704,13 +1659,9 @@ disgusting: // tests/contracts/abi.algo.ts:220 // a: StaticArray<[uint16<2>, uint64, [uint16, uint64], StaticArray, 2>], 2> = [ - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0036 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0036 // initial head offset int 11 itob extract 6 0 @@ -1718,37 +1669,23 @@ disgusting: itob extract 6 0 concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 33 itob - concat - store 0 // tuple head - load 0 // tuple head - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 44 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 55 itob - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + callsub process_static_tuple_element int 66 itob int 77 @@ -1760,18 +1697,12 @@ disgusting: itob concat concat - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0036 - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + byte 0x // initial head + byte 0x // initial tail + byte 0x0036 // initial head offset int 111 itob extract 6 0 @@ -1779,37 +1710,23 @@ disgusting: itob extract 6 0 concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 333 itob - concat - store 0 // tuple head - load 0 // tuple head - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 444 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 555 itob - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + callsub process_static_tuple_element int 666 itob int 777 @@ -1821,11 +1738,9 @@ disgusting: itob concat concat - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail concat frame_bury -1 // a: [uint16[2],uint64,[uint16,uint64],uint64[2][2]][2] @@ -1898,31 +1813,21 @@ returnTuple: // tests/contracts/abi.algo.ts:230 // a: [uint64, uint16, uint64] = [11, 22, 33] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0012 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0012 // initial head offset int 11 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 22 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 33 itob - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint64,uint16,uint64] // tests/contracts/abi.algo.ts:231 @@ -2175,46 +2080,30 @@ dynamicTupleArray: // tests/contracts/abi.algo.ts:262 // a: [uint16, uint64][] = [[11, 22], [33, 44]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 11 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 22 itob - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000a - store 2 // head offset - load 0 // tuple head + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail + byte 0x // initial head + byte 0x // initial tail + byte 0x000a // initial head offset int 33 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 44 itob - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail concat byte 0x0002 swap @@ -2262,27 +2151,16 @@ returnTupleWithDyamicArray: // tests/contracts/abi.algo.ts:268 // a: [uint64, uint16, uint64[], uint16[]] = [1, 2, [3, 4], [5, 6]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x000e - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x000e // initial head offset int 1 itob - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 3 itob int 4 @@ -2291,22 +2169,7 @@ returnTupleWithDyamicArray: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 5 itob extract 6 0 @@ -2317,21 +2180,9 @@ returnTupleWithDyamicArray: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint64,uint16,uint64[],uint16[]] // tests/contracts/abi.algo.ts:270 @@ -2362,28 +2213,17 @@ returnDynamicArrayFromTuple: // tests/contracts/abi.algo.ts:274 // a: [uint8, uint16, uint8[], uint16[], uint8[]] = [1, 2, [3, 4], [5, 6], [7, 8]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0009 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0009 // initial head offset int 1 itob extract 7 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 3 itob extract 7 0 @@ -2394,22 +2234,7 @@ returnDynamicArrayFromTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 5 itob extract 6 0 @@ -2420,22 +2245,7 @@ returnDynamicArrayFromTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 7 itob extract 7 0 @@ -2446,21 +2256,9 @@ returnDynamicArrayFromTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint8,uint16,uint8[],uint16[],uint8[]] // tests/contracts/abi.algo.ts:276 @@ -2510,109 +2308,43 @@ updateDynamicArrayInTuple: // tests/contracts/abi.algo.ts:280 // a: [uint8, uint16[], uint8[], uint16[], uint8[]] = [9, [8], [7], [6], [5]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0009 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0009 // initial head offset int 9 itob extract 7 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 8 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 7 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 6 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 5 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint8,uint16[],uint8[],uint16[],uint8[]] // tests/contracts/abi.algo.ts:282 @@ -2649,8 +2381,6 @@ updateDynamicArrayInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 10 itob @@ -2699,8 +2429,6 @@ updateDynamicArrayInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 12 itob @@ -2746,8 +2474,6 @@ updateDynamicArrayInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 14 itob @@ -2790,8 +2516,6 @@ updateDynamicArrayInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 16 itob @@ -2852,28 +2576,17 @@ nonLiteralDynamicElementInTuple: // tests/contracts/abi.algo.ts:293 // a: [uint8, uint16, uint8[], uint16[], uint8[]] = [1, 2, [3, 4], e, [7, 8]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0009 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0009 // initial head offset int 1 itob extract 7 0 - concat - store 0 // tuple head - load 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 3 itob extract 7 0 @@ -2884,39 +2597,9 @@ nonLiteralDynamicElementInTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element frame_dig -1 // e: uint16[] - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 7 itob extract 7 0 @@ -2927,21 +2610,9 @@ nonLiteralDynamicElementInTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -2 // a: [uint8,uint16,uint8[],uint16[],uint8[]] // tests/contracts/abi.algo.ts:295 @@ -3881,44 +3552,20 @@ stringInTuple: // tests/contracts/abi.algo.ts:388 // a: [uint16, uint8[], string, uint8[]] = [1, [2], 'Hello World!', [3]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0008 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0008 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element byte "Hello World!" dup len @@ -3926,43 +3573,16 @@ stringInTuple: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint8[],string,uint8[]] // tests/contracts/abi.algo.ts:390 @@ -3993,44 +3613,20 @@ accesStringInTuple: // tests/contracts/abi.algo.ts:394 // a: [uint16, uint8[], string, uint8[]] = [1, [2], 'Hello World!', [3]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0008 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0008 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element byte "Hello World!" dup len @@ -4038,43 +3634,16 @@ accesStringInTuple: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint8[],string,uint8[]] // tests/contracts/abi.algo.ts:396 @@ -4158,44 +3727,20 @@ updateStringInTuple: // tests/contracts/abi.algo.ts:402 // a: [uint8, uint16[], string, uint16[], uint8[]] = [9, [8], 'Hi?', [6], [5]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0009 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0009 // initial head offset int 9 itob extract 7 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 8 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element byte "Hi?" dup len @@ -4203,65 +3748,23 @@ updateStringInTuple: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 6 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 5 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint8,uint16[],string,uint16[],uint8[]] // tests/contracts/abi.algo.ts:404 @@ -4298,8 +3801,6 @@ updateStringInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 10 itob @@ -4348,8 +3849,6 @@ updateStringInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element byte "Hello World!" dup @@ -4392,8 +3891,6 @@ updateStringInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 14 itob @@ -4436,8 +3933,6 @@ updateStringInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 16 itob @@ -4483,81 +3978,32 @@ updateTupleWithOnlyDynamicTypes: // tests/contracts/abi.algo.ts:414 // a: [uint16[], uint16[], uint16[]] = [[1], [2], [3]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0006 - store 2 // head offset - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0006 // initial head offset int 1 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 2 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 6 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16[],uint16[],uint16[]] // tests/contracts/abi.algo.ts:416 @@ -4582,8 +4028,6 @@ updateTupleWithOnlyDynamicTypes: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 4 itob @@ -4629,8 +4073,6 @@ updateTupleWithOnlyDynamicTypes: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 6 itob @@ -4673,8 +4115,6 @@ updateTupleWithOnlyDynamicTypes: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 8 itob @@ -4720,16 +4160,9 @@ shortenDynamicElementInTuple: // tests/contracts/abi.algo.ts:424 // a: [uint16[], uint16[], uint16[]] = [[1, 2], [2, 3], [3, 4]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0006 - store 2 // head offset - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0006 // initial head offset int 1 itob extract 6 0 @@ -4740,22 +4173,7 @@ shortenDynamicElementInTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 2 itob extract 6 0 @@ -4766,22 +4184,7 @@ shortenDynamicElementInTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 6 0 @@ -4792,21 +4195,9 @@ shortenDynamicElementInTuple: byte 0x0002 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16[],uint16[],uint16[]] // tests/contracts/abi.algo.ts:426 @@ -4831,8 +4222,6 @@ shortenDynamicElementInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 5 itob @@ -4874,8 +4263,6 @@ shortenDynamicElementInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 6 itob @@ -4914,8 +4301,6 @@ shortenDynamicElementInTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 7 itob @@ -4957,22 +4342,13 @@ namedTuple: // tests/contracts/abi.algo.ts:434 // a: { - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0004 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0004 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element byte "Hello World!" dup len @@ -4980,21 +4356,9 @@ namedTuple: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: { foo: uint16, bar: string, } // tests/contracts/abi.algo.ts:442 @@ -5051,22 +4415,13 @@ updateNamedTuple: // tests/contracts/abi.algo.ts:446 // a: { - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0004 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0004 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element byte "Hi?" dup len @@ -5074,21 +4429,9 @@ updateNamedTuple: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: { foo: uint16, bar: string, } // tests/contracts/abi.algo.ts:454 @@ -5113,8 +4456,6 @@ updateNamedTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element byte "Hello World!" dup @@ -5183,22 +4524,13 @@ customTypes: // tests/contracts/abi.algo.ts:460 // aa: CustomType = { - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0004 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0004 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element byte "Hi?" dup len @@ -5206,21 +4538,9 @@ customTypes: extract 6 2 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // aa: CustomType // tests/contracts/abi.algo.ts:465 @@ -5245,8 +4565,6 @@ customTypes: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element byte "Hello World!" dup @@ -5429,49 +4747,26 @@ dynamicArrayInMiddleOfTuple: // tests/contracts/abi.algo.ts:480 // a: [uint16, uint8[], uint16] = [1, [2], 3] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0006 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0006 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint8[],uint16] // tests/contracts/abi.algo.ts:482 @@ -5502,49 +4797,26 @@ accessDynamicArrayInMiddleOfTuple: // tests/contracts/abi.algo.ts:486 // a: [uint16, uint8[], uint16] = [1, [2], 3] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0006 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0006 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint8[],uint16] // tests/contracts/abi.algo.ts:488 @@ -5594,22 +4866,13 @@ accessDynamicArrayElementInTuple: // tests/contracts/abi.algo.ts:492 // a: [uint16, uint8[]] = [11, [22, 33, 44]] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0004 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0004 // initial head offset int 11 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 22 itob extract 7 0 @@ -5624,21 +4887,9 @@ accessDynamicArrayElementInTuple: byte 0x0003 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_dynamic_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint8[]] // tests/contracts/abi.algo.ts:494 @@ -5688,49 +4939,26 @@ updateDynamicArrayInMiddleOfTuple: // tests/contracts/abi.algo.ts:498 // a: [uint16, uint8[], uint16] = [1, [2], 3] - byte 0x - dup - store 0 // tuple head - store 1 // tuple tail - byte 0x0006 - store 2 // head offset - load 0 // tuple head + byte 0x // initial head + byte 0x // initial tail + byte 0x0006 // initial head offset int 1 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 2 // head offset - concat - store 0 // tuple head + callsub process_static_tuple_element int 2 itob extract 7 0 byte 0x0001 swap concat - dup - len - load 2 // head offset - btoi - + - itob - extract 6 2 - store 2 // head offset - load 1 // tuple tail - swap - concat - store 1 // tuple tail - load 0 // tuple head + callsub process_dynamic_tuple_element int 3 itob extract 6 0 - concat - store 0 // tuple head - load 0 // tuple head - load 1 // tuple tail - concat + callsub process_static_tuple_element + pop // pop head offset + concat // concat head and tail frame_bury -1 // a: [uint16,uint8[],uint16] // tests/contracts/abi.algo.ts:500 @@ -5755,8 +4983,6 @@ updateDynamicArrayInMiddleOfTuple: int 2 + // add two for length extract3 - store 4 // old tuple element - load 4 // old tuple element len // length of old element int 4 itob diff --git a/tests/contracts/AbiTest.json b/tests/contracts/AbiTest.json index 54198b283..d41b3315a 100644 --- a/tests/contracts/AbiTest.json +++ b/tests/contracts/AbiTest.json @@ -1 +1,904 @@ -{"hints":{},"schema":{"local":{"declared":{"lRef":{"type":"bytes","key":"lRef"},"lMap":{"type":"bytes","key":"lMap"}},"reserved":{}},"global":{"declared":{"gRef":{"type":"bytes","key":"gRef"},"gMap":{"type":"bytes","key":"gMap"}},"reserved":{}}},"state":{"global":{"num_byte_slices":2,"num_uints":0},"local":{"num_byte_slices":2,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDMgMQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gaGVhZCBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQgb2YgZWxlbWVudAoJaW50IDAKCXN3YXAKCWV4dHJhY3QzIC8vIGV4dHJhY3QgcG9ydGlvbiBvZiB0dXBsZSBiZWZvcmUgZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIG5ldyB0dXBsZSBlbGVtZW50Cgljb25jYXQKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0xIC8vIGhlYWQgb2Zmc2V0CglleHRyYWN0X3VpbnQxNiAvLyBleHRyYWN0IGR5bmFtaWMgYXJyYXkgb2Zmc2V0IG9mIGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCSsKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsZW4KCXN1YnN0cmluZzMKCWNvbmNhdAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCTwKCWJueiBzd2FwcGVkX2RpZmZlcmVuY2UKCWZyYW1lX2RpZyAtMiAvLyBuZXcgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBuZXcgZWxlbWVudAoJZnJhbWVfZGlnIC0zIC8vIG9sZCBlbGVtZW50IGxlbmd0aAoJaW50IDEKCXN0b3JlIDcgLy8gc3VidHJhY3QgaGVhZCBkaWZmZXJlbmNlCgliIGdldF9kaWZmZXJlbmNlCgpzd2FwcGVkX2RpZmZlcmVuY2U6CglmcmFtZV9kaWcgLTMgLy8gb2xkIGVsZW1lbnQgbGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWludCAwCglzdG9yZSA3IC8vIHN1YnRyYWN0IGhlYWQgZGlmZmVyZW5jZQoKZ2V0X2RpZmZlcmVuY2U6CgktIC8vIGdldCBsZW5ndGggZGlmZmVyZW5jZQoJcmV0c3ViCgp1cGRhdGVfZHluYW1pY19oZWFkOgoJcHJvdG8gMiAwCglmcmFtZV9kaWcgLTIgLy8gbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gZHluYW1pYyBhcnJheSBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQKCWxvYWQgNyAvLyBzdWJ0cmFjdCBoZWFkIGRpZmZlcmVuY2UKCWJ6IHN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZQoJKyAvLyBhZGQgZGlmZmVyZW5jZSB0byBvZmZzZXQKCWIgZW5kX2NhbGNfbmV3X2hlYWQKCnN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZToKCXN3YXAKCS0gLy8gc3VidHJhY3QgZGlmZmVyZW5jZSBmcm9tIG9mZmV0CgplbmRfY2FsY19uZXdfaGVhZDoKCWl0b2IgLy8gY29udmVydCB0byBieXRlcwoJZXh0cmFjdCA2IDIgLy8gY29udmVydCB0byB1aW50MTYKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglzd2FwCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0Cglzd2FwCglyZXBsYWNlMyAvLyB1cGRhdGUgb2Zmc2V0CglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCXJldHN1YgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYmFyZV9yb3V0ZV9PcHRJbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBPcHRJbgoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgb3B0SW4KCWludCAxCglyZXR1cm4KCm9wdEluOgoJcHJvdG8gMCAwCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBzdGF0aWNBcnJheQoJaW50IDEKCXJldHVybgoKc3RhdGljQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjkKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RhdGljQXJyYXlBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgc3RhdGljQXJyYXlBcmcKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5QXJnOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwbiAzCgljYWxsc3ViIG5vbkxpdGVyYWxTdGF0aWNBcnJheUVsZW1lbnRzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NQoJLy8gbjEgPSAxMQoJaW50IDExCglmcmFtZV9idXJ5IC0xIC8vIG4xOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDYKCS8vIG4yID0gMjIKCWludCAyMgoJZnJhbWVfYnVyeSAtMiAvLyBuMjogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ3CgkvLyBuMyA9IDMzCglpbnQgMzMKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFtuMSwgbjIsIG4zXQoJZnJhbWVfZGlnIC0xIC8vIG4xOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9taXhlZFN0YXRpY0FycmF5RWxlbWVudHM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cG4gMwoJY2FsbHN1YiBtaXhlZFN0YXRpY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCm1peGVkU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NAoJLy8gbjEgPSAzCglpbnQgMwoJZnJhbWVfYnVyeSAtMSAvLyBuMTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU1CgkvLyBuMiA9IDQKCWludCA0CglmcmFtZV9idXJ5IC0yIC8vIG4yOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTYKCS8vIG4zID0gNQoJaW50IDUKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NwoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCA5PiA9IFswLCAxLCAyLCBuMSwgbjIsIG4zLCA2LCA3LCA4XQoJaW50IDAKCWl0b2IKCWludCAxCglpdG9iCgljb25jYXQKCWludCAyCglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBuMTogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWludCA2CglpdG9iCgljb25jYXQKCWludCA3CglpdG9iCgljb25jYXQKCWludCA4CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzldCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU5CgkvLyByZXR1cm4gYVsxXSArIGFbNF0gKyBhWzddOwoJZnJhbWVfZGlnIC00IC8vIGE6IHVpbnQ2NFs5XQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbOV0KCWludCA0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCgkrCglmcmFtZV9kaWcgLTQgLy8gYTogdWludDY0WzldCglpbnQgNwoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJKwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3M6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NjMKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NAoJLy8gbiA9IDIKCWludCAyCglmcmFtZV9idXJ5IC0yIC8vIG46IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NgoJLy8gcmV0dXJuIGFbbl07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglmcmFtZV9kaWcgLTIgLy8gbjogdWludDY0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2V0U3RhdGljQXJyYXlFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzAKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo3MgoJLy8gYVsxXSA9IDIyMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMjIyCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzQKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgc3RhdGljQXJyYXlJblN0b3JhZ2VSZWYKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjc4CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODAKCS8vIHRoaXMuZ1JlZi5wdXQoYSkKCWJ5dGUgImdSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MQoJLy8gdGhpcy5sUmVmLnB1dCh0aGlzLnR4bi5zZW5kZXIsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MgoJLy8gdGhpcy5iUmVmLnB1dChhKQoJYnl0ZSAiYlJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODQKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdSZWYiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiUmVmIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjkwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmCglpbnQgMQoJcmV0dXJuCgp1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo5NAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjk2CgkvLyB0aGlzLmdSZWYucHV0KGEpCglieXRlICJnUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTcKCS8vIHRoaXMubFJlZi5wdXQodGhpcy50eG4uc2VuZGVyLCBhKQoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTgKCS8vIHRoaXMuYlJlZi5wdXQoYSkKCWJ5dGUgImJSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwMAoJLy8gdGhpcy5nUmVmLmdldCgpWzFdID0gMTExCglieXRlICJnUmVmIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMQoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImdSZWYiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMDEKCS8vIHRoaXMubFJlZi5nZXQodGhpcy50eG4uc2VuZGVyKVsxXSA9IDIyMgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyMgoJaXRvYgoJcmVwbGFjZTMKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCgl1bmNvdmVyIDIKCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTAyCgkvLyB0aGlzLmJSZWYuZ2V0KClbMV0gPSAzMzMKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMwoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImJSZWYiCglzd2FwCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwNAoJLy8gcmV0OiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWwoJYnl0ZSAiZ1JlZiIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTIgLy8gcmV0OiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTEwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHN0YXRpY0FycmF5SW5TdG9yYWdlTWFwCglpbnQgMQoJcmV0dXJuCgpzdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTQKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTYKCS8vIHRoaXMuZ01hcC5wdXQoJ2dNYXAnLCBhKQoJYnl0ZSAiZ01hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9nbG9iYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExNwoJLy8gdGhpcy5sTWFwLnB1dCh0aGlzLnR4bi5zZW5kZXIsICdsTWFwJywgYSkKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfbG9jYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExOAoJLy8gdGhpcy5iTWFwLnB1dCgnYk1hcCcsIGEpCglieXRlICJiTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMjAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEyNgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiB1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZU1hcAoJaW50IDEKCXJldHVybgoKdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMwCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMyCgkvLyB0aGlzLmdNYXAucHV0KCdnTWFwJywgYSkKCWJ5dGUgImdNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzMKCS8vIHRoaXMubE1hcC5wdXQodGhpcy50eG4uc2VuZGVyLCAnbE1hcCcsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzQKCS8vIHRoaXMuYk1hcC5wdXQoJ2JNYXAnLCBhKQoJYnl0ZSAiYk1hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM2CgkvLyB0aGlzLmdNYXAuZ2V0KCdnTWFwJylbMV0gPSAxMTExCglieXRlICJnTWFwIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMTEKCWl0b2IKCXJlcGxhY2UzCglieXRlICJnTWFwIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM3CgkvLyB0aGlzLmxNYXAuZ2V0KHRoaXMudHhuLnNlbmRlciwgJ2xNYXAnKVsxXSA9IDIyMjIKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMjIyCglpdG9iCglyZXBsYWNlMwoJdHhuIFNlbmRlcgoJYnl0ZSAibE1hcCIKCXVuY292ZXIgMgoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzgKCS8vIHRoaXMuYk1hcC5nZXQoJ2JNYXAnKVsxXSA9IDMzMzMKCWJ5dGUgImJNYXAiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMzMKCWl0b2IKCXJlcGxhY2UzCglieXRlICJiTWFwIgoJc3dhcAoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbmVzdGVkU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgbmVzdGVkU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCm5lc3RlZFN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MAoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDY0LCAzPiwgMz4gPSBbWzExLCAyMiwgMzNdLCBbNDQsIDU1LCA2Nl0sIFs3NywgODgsIDk5XV0KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglpbnQgNDQKCWl0b2IKCWludCA1NQoJaXRvYgoJY29uY2F0CglpbnQgNjYKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWludCA4OAoJaXRvYgoJY29uY2F0CglpbnQgOTkKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTIKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheUVsZW1lbnQKCWludCAxCglyZXR1cm4KCnVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTYKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU4CgkvLyBhWzFdWzFdID0gNTU1CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA1NTUKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjAKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5CglpbnQgMQoJcmV0dXJuCgp1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjQKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTY2CgkvLyBhWzFdID0gWzQ0NCwgNTU1LCA2NjZdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgNDQ0CglpdG9iCglpbnQgNTU1CglpdG9iCgljb25jYXQKCWludCA2NjYKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdWzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2OAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHRocmVlRGltZW5zaW9uYWxVaW50MTZBcnJheQoJaW50IDEKCXJldHVybgoKdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE3MgoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDE2LCAyPiwgMj4sIDI+ID0gWwoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDY2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzYKCS8vIGFbMV1bMV0gPSBbNzc3LCA4ODhdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2WzJdWzJdWzJdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAxCglpbnQgNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDc3NwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA4ODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzgKCS8vIHJldHVybiBhWzFdWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCAxCglpbnQgMiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NpbXBsZVR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNpbXBsZVR1cGxlCglpbnQgMQoJcmV0dXJuCgpzaW1wbGVUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxODIKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0LCB1aW50MTZdID0gWzExLCAyMiwgMzMsIDQ0XQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMTQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NCx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE4NAoJLy8gcmV0dXJuIGFbM107CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0LHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMTgKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheUluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlJblR1cGxlCglpbnQgMQoJcmV0dXJuCgphcnJheUluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTg4CgkvLyBhOiBbdWludDY0LCB1aW50MTYsIFN0YXRpY0FycmF5PHVpbnQ2NCwgMj4sIHVpbnQxNl0gPSBbCglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAxYwoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxMQoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAzMwoJaXRvYgoJaW50IDQ0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NFsyXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE5MgoJLy8gcmV0dXJuIGFbMl1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0WzJdLHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMTAKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90dXBsZUluQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdHVwbGVJbkFycmF5CglpbnQgMQoJcmV0dXJuCgp0dXBsZUluQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTk2CgkvLyBhOiBTdGF0aWNBcnJheTxbdWludDY0LCB1aW50MTZdLCAyPiA9IFsKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDExCglpdG9iCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGEKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTZdWzJdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIwMAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTZdWzJdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCWludCAxMCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCSsKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90dXBsZUluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdHVwbGVJblR1cGxlCglpbnQgMQoJcmV0dXJuCgp0dXBsZUluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjA0CgkvLyBhOiBbdWludDE2LCB1aW50MTYsIFt1aW50NjQsIHVpbnQxNl0sIFt1aW50MTYsIHVpbnQ2NF1dID0gWwoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMTgKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGEKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgNjYKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDE2LFt1aW50NjQsdWludDE2XSxbdWludDE2LHVpbnQ2NF1dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIwOAoJLy8gcmV0dXJuIGFbM11bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50MTYsW3VpbnQ2NCx1aW50MTZdLFt1aW50MTYsdWludDY0XV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMTQKCWludCAyCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3Nob3J0VHlwZU5vdGF0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNob3J0VHlwZU5vdGF0aW9uCglpbnQgMQoJcmV0dXJuCgpzaG9ydFR5cGVOb3RhdGlvbjoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMTIKCS8vIGE6IFt1aW50MTY8Mj4sIHVpbnQ2NDwyPiwgdWludDE2PDI+XSA9IFsKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDE4CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAzMwoJaXRvYgoJaW50IDQ0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDY2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNlsyXSx1aW50NjRbMl0sdWludDE2WzJdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMTYKCS8vIHJldHVybiBhWzJdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0WzJdLHVpbnQxNlsyXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMjAKCWludCAxCglpbnQgMiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2Rpc2d1c3Rpbmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgZGlzZ3VzdGluZwoJaW50IDEKCXJldHVybgoKZGlzZ3VzdGluZzoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMjAKCS8vIGE6IFN0YXRpY0FycmF5PFt1aW50MTY8Mj4sIHVpbnQ2NCwgW3VpbnQxNiwgdWludDY0XSwgU3RhdGljQXJyYXk8dWludDY0PDI+LCAyPl0sIDI+ID0gWwoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMzYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMzCglpdG9iCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgNjYKCWl0b2IKCWludCA3NwoJaXRvYgoJY29uY2F0CglpbnQgODgKCWl0b2IKCWludCA5OQoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMzYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMzCglpdG9iCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0NAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1NQoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCA2NjYKCWl0b2IKCWludCA3NzcKCWl0b2IKCWNvbmNhdAoJaW50IDg4OAoJaXRvYgoJaW50IDk5OQoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIyNQoJLy8gYVsxXVszXVsxXSA9IFs4ODg4LCA5OTk5XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCWludCA1NCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyCgkrCglpbnQgMQoJaW50IDE2IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgODg4OAoJaXRvYgoJaW50IDk5OTkKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNlsyXSx1aW50NjQsW3VpbnQxNix1aW50NjRdLHVpbnQ2NFsyXVsyXV1bMl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjI2CgkvLyByZXR1cm4gYVsxXVszXVsxXVswXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2WzJdLHVpbnQ2NCxbdWludDE2LHVpbnQ2NF0sdWludDY0WzJdWzJdXVsyXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgNTQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMgoJKwoJaW50IDEKCWludCAxNiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDAKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVyblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHJldHVyblR1cGxlCglpbnQgMQoJcmV0dXJuCgpyZXR1cm5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMzAKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0XSA9IFsxMSwgMjIsIDMzXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMTIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIzMQoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0XQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdHVwbGVBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdHVwbGVBcmcKCWludCAxCglyZXR1cm4KCnR1cGxlQXJnOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIzNQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0XQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA4CglpbnQgMgoJZXh0cmFjdDMKCWJ5dGUgMHhGRkZGCgliJgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGR5bmFtaWNBcnJheQoJaW50IDEKCXJldHVybgoKZHluYW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIzOQoJLy8gYTogdWludDY0W10gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI0MQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiByZXR1cm5EeW5hbWljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVybkR5bmFtaWNBcnJheToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNDUKCS8vIGE6IHVpbnQ2NFtdID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNDYKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9keW5hbWljQXJyYXlBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgZHluYW1pY0FycmF5QXJnCglpbnQgMQoJcmV0dXJuCgpkeW5hbWljQXJyYXlBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjUwCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5RWxlbWVudDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50CglpbnQgMQoJcmV0dXJuCgp1cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI1NAoJLy8gYTogdWludDY0W10gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI1NgoJLy8gYVsxXSA9IDIyMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIyMgoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjU4CgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY1R1cGxlQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgZHluYW1pY1R1cGxlQXJyYXkKCWludCAxCglyZXR1cm4KCmR5bmFtaWNUdXBsZUFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI2MgoJLy8gYTogW3VpbnQxNiwgdWludDY0XVtdID0gW1sxMSwgMjJdLCBbMzMsIDQ0XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGEKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCA0NAoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50NjRdW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjY0CgkvLyByZXR1cm4gYVsxXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ2NF1bXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMTAgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblR1cGxlV2l0aER5YW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI2OAoJLy8gYTogW3VpbnQ2NCwgdWludDE2LCB1aW50NjRbXSwgdWludDE2W11dID0gWzEsIDIsIFszLCA0XSwgWzUsIDZdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGUKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMKCWl0b2IKCWludCA0CglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjcwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiByZXR1cm5EeW5hbWljQXJyYXlGcm9tVHVwbGUKCWludCAxCglyZXR1cm4KCnJldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNzQKCS8vIGE6IFt1aW50OCwgdWludDE2LCB1aW50OFtdLCB1aW50MTZbXSwgdWludDhbXV0gPSBbMSwgMiwgWzMsIDRdLCBbNSwgNl0sIFs3LCA4XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA5CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCA3CglpdG9iCglleHRyYWN0IDcgMAoJaW50IDgKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTYsdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNzYKCS8vIHJldHVybiBhWzRdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTYsdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZQoJaW50IDEKCXJldHVybgoKdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyODAKCS8vIGE6IFt1aW50OCwgdWludDE2W10sIHVpbnQ4W10sIHVpbnQxNltdLCB1aW50OFtdXSA9IFs5LCBbOF0sIFs3XSwgWzZdLCBbNV1dCglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwOQoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCA5CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgOAoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4MgoJLy8gYVswXSA9IDk5IGFzIHVpbnQ4CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJaW50IDk5CglpdG9iCglleHRyYWN0IDcgMAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjgzCgkvLyBhWzFdID0gWzEwLCAxMV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDEwCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgMQoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgMwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNQoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyODQKCS8vIGFbMl0gPSBbMTIsIDEzXQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDMKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgMTIKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgMTMKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4NQoJLy8gYVszXSA9IFsxNCwgMTVdCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNQoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg2CgkvLyBhWzRdID0gWzE2LCAxN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDE2CglpdG9iCglleHRyYWN0IDcgMAoJaW50IDE3CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgNwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyODgKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9ub25MaXRlcmFsRHluYW1pY0VsZW1lbnRJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZQoJaW50IDEKCXJldHVybgoKbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyOTIKCS8vIGU6IHVpbnQxNltdID0gWzUsIDZdCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGU6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI5MwoJLy8gYTogW3VpbnQ4LCB1aW50MTYsIHVpbnQ4W10sIHVpbnQxNltdLCB1aW50OFtdXSA9IFsxLCAyLCBbMywgNF0sIGUsIFs3LCA4XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA5CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJZnJhbWVfZGlnIC0xIC8vIGU6IHVpbnQxNltdCglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDcKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgOAoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI5NQoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVB1c2g6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQdXNoCglpbnQgMQoJcmV0dXJuCgphcnJheVB1c2g6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjk5CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMDEKCS8vIGEucHVzaCgzIGFzIHVpbnQxNikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJZXh0cmFjdCAyIDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzAzCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYXJyYXlQb3A6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQb3AKCWludCAxCglyZXR1cm4KCmFycmF5UG9wOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwNwoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwOQoJLy8gYS5wb3AoKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTEKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVBvcFZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgYXJyYXlQb3BWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlQb3BWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTUKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTcKCS8vIHYgPSBhLnBvcCgpIQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZHVwCglsZW4KCWludCAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWNvdmVyIDIKCWV4dHJhY3QzCglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC0yIC8vIHY6IHVpbnQxNgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTkKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNgoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhcnJheVNwbGljZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2U6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzIzCgkvLyBhOiB1aW50NjRbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWludCAyCglpdG9iCgljb25jYXQKCWludCAzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzI1CgkvLyBhLnNwbGljZSgxLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDEKCWludCA4CgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDgKCSoKCWludCA4CgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMjcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZVZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDMKCWNhbGxzdWIgYXJyYXlTcGxpY2VWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2VWYWx1ZToKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzEKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgOAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAxMAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMGEKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzMKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzM0CgkvLyBsID0gNwoJaW50IDcKCWZyYW1lX2J1cnkgLTMgLy8gbDogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNQoJLy8gdiA9IGEuc3BsaWNlKGksIGwpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJZnJhbWVfZGlnIC0zIC8vIGw6IHVpbnQ2NAoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpdG9iCglleHRyYWN0IDYgMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWludCAyCgktCglleHRyYWN0MwoJY29uY2F0Cglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC00IC8vIHY6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNwoJLy8gcmV0dXJuIHY7CglmcmFtZV9kaWcgLTQgLy8gdjogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBcnJheUVsZW1lbnRzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgZHluYW1pY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBcnJheUVsZW1lbnRzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MQoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MgoJLy8gbmV3QTogdWludDE2W10gPSBbYVswXSwgYVsxXSwgYVsyXV0KCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDAKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMQoJaW50IDIgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCWV4dHJhY3QzCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIG5ld0E6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0NAoJLy8gcmV0dXJuIG5ld0E7CglmcmFtZV9kaWcgLTIgLy8gbmV3QTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNwbGljZUxhc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNDgKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNTAKCS8vIGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1MgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50VmFsdWU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiBzcGxpY2VMYXN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudFZhbHVlOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1NgoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1OAoJLy8gdiA9IGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMTMgLy8gc3BsaWNlIGJ5dGUgbGVuZ3RoCglpbnQgMgoJLQoJZXh0cmFjdDMKCWNvbmNhdAoJc3dhcAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoJZnJhbWVfYnVyeSAtMiAvLyB2OiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjAKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3BsaWNlRmlyc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY0CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY2CgkvLyBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjgKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHNwbGljZUZpcnN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzIKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzQKCS8vIHYgPSBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJaW50IDIKCS0KCWV4dHJhY3QzCgljb25jYXQKCXN3YXAKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCWZyYW1lX2J1cnkgLTIgLy8gdjogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzc2CgkvLyByZXR1cm4gdjsKCWZyYW1lX2RpZyAtMiAvLyB2OiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RyaW5nUmV0dXJuOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIHN0cmluZ1JldHVybgoJaW50IDEKCXJldHVybgoKc3RyaW5nUmV0dXJuOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM4MAoJLy8gcmV0dXJuICdIZWxsbyBXb3JsZCEnOwoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0FyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgc3RyaW5nQXJnCglpbnQgMQoJcmV0dXJuCgpzdHJpbmdBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzg0CgkvLyBhc3NlcnQocyA9PT0gJ0hlbGxvIFdvcmxkIScpCglmcmFtZV9kaWcgLTEgLy8gczogYnl0ZXMKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3RyaW5nSW5UdXBsZQoJaW50IDEKCXJldHVybgoKc3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozODgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHN0cmluZywgdWludDhbXV0gPSBbMSwgWzJdLCAnSGVsbG8gV29ybGQhJywgWzNdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDgKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzkwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hY2Nlc1N0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYWNjZXNTdHJpbmdJblR1cGxlCglpbnQgMQoJcmV0dXJuCgphY2Nlc1N0cmluZ0luVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzk0CgkvLyBhOiBbdWludDE2LCB1aW50OFtdLCBzdHJpbmcsIHVpbnQ4W11dID0gWzEsIFsyXSwgJ0hlbGxvIFdvcmxkIScsIFszXV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA4CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDcgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM5NgoJLy8gYXNzZXJ0KGFbMl0gPT09ICdIZWxsbyBXb3JsZCEnKQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTgKCS8vIHJldHVybiBhWzJdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZVN0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlU3RyaW5nSW5UdXBsZQoJaW50IDEKCXJldHVybgoKdXBkYXRlU3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDIKCS8vIGE6IFt1aW50OCwgdWludDE2W10sIHN0cmluZywgdWludDE2W10sIHVpbnQ4W11dID0gWzksIFs4XSwgJ0hpPycsIFs2XSwgWzVdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDkKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgOQoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDgKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAiSGk/IgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA0CgkvLyBhWzBdID0gOTkgYXMgdWludDgKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCWludCA5OQoJaXRvYgoJZXh0cmFjdCA3IDAKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA1CgkvLyBhWzFdID0gWzEwLCAxMV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgMTAKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAxCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA2CgkvLyBhWzJdID0gJ0hlbGxvIFdvcmxkIScKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDMKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDMKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDcKCS8vIGFbM10gPSBbMTQsIDE1XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNQoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDgKCS8vIGFbNF0gPSBbMTYsIDE3XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNwoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZVR1cGxlV2l0aE9ubHlEeW5hbWljVHlwZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcwoJaW50IDEKCXJldHVybgoKdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTQKCS8vIGE6IFt1aW50MTZbXSwgdWludDE2W10sIHVpbnQxNltdXSA9IFtbMV0sIFsyXSwgWzNdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDE2CgkvLyBhWzBdID0gWzQsIDVdCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAwCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDQKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTcKCS8vIGFbMV0gPSBbNiwgN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQxOAoJLy8gYVsyXSA9IFs4LCA5XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA4CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCA0CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDIwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zaG9ydGVuRHluYW1pY0VsZW1lbnRJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGUKCWludCAxCglyZXR1cm4KCnNob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDI0CgkvLyBhOiBbdWludDE2W10sIHVpbnQxNltdLCB1aW50MTZbXV0gPSBbWzEsIDJdLCBbMiwgM10sIFszLCA0XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA2CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQyNgoJLy8gYVswXSA9IFs1XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA1CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjcKCS8vIGFbMV0gPSBbNl0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWludCAyCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA0CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDI4CgkvLyBhWzJdID0gWzddCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA0Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDcKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglpbnQgNAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQzMAoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbmFtZWRUdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBuYW1lZFR1cGxlCglpbnQgMQoJcmV0dXJuCgpuYW1lZFR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQzNAoJLy8gYTogewoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHsgZm9vOiB1aW50MTYsIGJhcjogc3RyaW5nLCB9CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ0MgoJLy8gcmV0dXJuIGEuYmFyOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHsgZm9vOiB1aW50MTYsIGJhcjogc3RyaW5nLCB9CglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVOYW1lZFR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZU5hbWVkVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZU5hbWVkVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDQ2CgkvLyBhOiB7CglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNAoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglieXRlICJIaT8iCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDU0CgkvLyBhLmJhciA9ICdIZWxsbyBXb3JsZCEnCglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiB7IGZvbzogdWludDE2LCBiYXI6IHN0cmluZywgfQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NTYKCS8vIHJldHVybiBhLmJhcjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB7IGZvbzogdWludDE2LCBiYXI6IHN0cmluZywgfQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfY3VzdG9tVHlwZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgY3VzdG9tVHlwZXMKCWludCAxCglyZXR1cm4KCmN1c3RvbVR5cGVzOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ2MAoJLy8gYWE6IEN1c3RvbVR5cGUgPSB7CglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNAoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglieXRlICJIaT8iCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDY1CgkvLyBhYS5iYXIgPSAnSGVsbG8gV29ybGQhJwoJZnJhbWVfZGlnIC0xIC8vIGFhOiBDdXN0b21UeXBlCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDY3CgkvLyByZXR1cm4gYWEuYmFyOwoJZnJhbWVfZGlnIC0xIC8vIGFhOiBDdXN0b21UeXBlCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNTdHJpbmdBcnJheUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBzdGF0aWNTdHJpbmdBcnJheUFyZwoJaW50IDEKCXJldHVybgoKc3RhdGljU3RyaW5nQXJyYXlBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDcxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMgoJKgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBkeW5hbWljQWNjZXNzT2ZEeW5hbWljRWxlbWVudEluU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NzUKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDc2CgkvLyByZXR1cm4gYVtpXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQoJaW50IDEKCXJldHVybgoKZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4MAoJLy8gYTogW3VpbnQxNiwgdWludDhbXSwgdWludDE2XSA9IFsxLCBbMl0sIDNdCglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0ODIKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hY2Nlc3NEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlCglpbnQgMQoJcmV0dXJuCgphY2Nlc3NEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDg2CgkvLyBhOiBbdWludDE2LCB1aW50OFtdLCB1aW50MTZdID0gWzEsIFsyXSwgM10KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA2CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDcgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4OAoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZQoJaW50IDEKCXJldHVybgoKYWNjZXNzRHluYW1pY0FycmF5RWxlbWVudEluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDkyCgkvLyBhOiBbdWludDE2LCB1aW50OFtdXSA9IFsxMSwgWzIyLCAzMywgNDRdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAzMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ5NAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWludCAxCglpbnQgMSAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCgkrCglpbnQgMQoJZXh0cmFjdDMKCWJ5dGUgMHhGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OTgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHVpbnQxNl0gPSBbMSwgWzJdLCAzXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTAwCgkvLyBhWzFdID0gWzQsIDVdCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAyCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwMgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CglibnogYmFyZV9yb3V0ZV9jcmVhdGUKCXR4biBPbkNvbXBsZXRpb24KCWludCBPcHRJbgoJPT0KCWludCAxCgltYXRjaCBiYXJlX3JvdXRlX09wdEluCgpyb3V0ZV9hYmk6CgltZXRob2QgInN0YXRpY0FycmF5KCl1aW50NjQiCgltZXRob2QgInJldHVyblN0YXRpY0FycmF5KCl1aW50NjRbM10iCgltZXRob2QgInN0YXRpY0FycmF5QXJnKHVpbnQ2NFszXSl1aW50NjQiCgltZXRob2QgIm5vbkxpdGVyYWxTdGF0aWNBcnJheUVsZW1lbnRzKCl1aW50NjQiCgltZXRob2QgIm1peGVkU3RhdGljQXJyYXlFbGVtZW50cygpdWludDY0IgoJbWV0aG9kICJub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3MoKXVpbnQ2NCIKCW1ldGhvZCAic2V0U3RhdGljQXJyYXlFbGVtZW50KCl1aW50NjQiCgltZXRob2QgInN0YXRpY0FycmF5SW5TdG9yYWdlUmVmKCl1aW50NjRbM10iCgltZXRob2QgInVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmKCl1aW50NjRbM10iCgltZXRob2QgInN0YXRpY0FycmF5SW5TdG9yYWdlTWFwKCl1aW50NjRbM10iCgltZXRob2QgInVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlTWFwKCl1aW50NjRbM10iCgltZXRob2QgIm5lc3RlZFN0YXRpY0FycmF5KCl1aW50NjQiCgltZXRob2QgInVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudCgpdWludDY0IgoJbWV0aG9kICJ1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheSgpdWludDY0IgoJbWV0aG9kICJ0aHJlZURpbWVuc2lvbmFsVWludDE2QXJyYXkoKXVpbnQxNiIKCW1ldGhvZCAic2ltcGxlVHVwbGUoKXVpbnQxNiIKCW1ldGhvZCAiYXJyYXlJblR1cGxlKCl1aW50NjQiCgltZXRob2QgInR1cGxlSW5BcnJheSgpdWludDE2IgoJbWV0aG9kICJ0dXBsZUluVHVwbGUoKXVpbnQ2NCIKCW1ldGhvZCAic2hvcnRUeXBlTm90YXRpb24oKXVpbnQxNiIKCW1ldGhvZCAiZGlzZ3VzdGluZygpdWludDY0IgoJbWV0aG9kICJyZXR1cm5UdXBsZSgpKHVpbnQ2NCx1aW50MTYsdWludDY0KSIKCW1ldGhvZCAidHVwbGVBcmcoKHVpbnQ2NCx1aW50MTYsdWludDY0KSl1aW50MTYiCgltZXRob2QgImR5bmFtaWNBcnJheSgpdWludDY0IgoJbWV0aG9kICJyZXR1cm5EeW5hbWljQXJyYXkoKXVpbnQ2NFtdIgoJbWV0aG9kICJkeW5hbWljQXJyYXlBcmcodWludDY0W10pdWludDY0IgoJbWV0aG9kICJ1cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50KCl1aW50NjQiCgltZXRob2QgImR5bmFtaWNUdXBsZUFycmF5KCl1aW50NjQiCgltZXRob2QgInJldHVyblR1cGxlV2l0aER5YW1pY0FycmF5KCkodWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXSkiCgltZXRob2QgInJldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZSgpdWludDhbXSIKCW1ldGhvZCAidXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZSgpKHVpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXSkiCgltZXRob2QgIm5vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGUoKSh1aW50OCx1aW50MTYsdWludDhbXSx1aW50MTZbXSx1aW50OFtdKSIKCW1ldGhvZCAiYXJyYXlQdXNoKCl1aW50MTZbXSIKCW1ldGhvZCAiYXJyYXlQb3AoKXVpbnQxNltdIgoJbWV0aG9kICJhcnJheVBvcFZhbHVlKCl1aW50MTYiCgltZXRob2QgImFycmF5U3BsaWNlKCl1aW50NjRbXSIKCW1ldGhvZCAiYXJyYXlTcGxpY2VWYWx1ZSgpdWludDE2W10iCgltZXRob2QgImR5bmFtaWNBcnJheUVsZW1lbnRzKCl1aW50MTZbXSIKCW1ldGhvZCAic3BsaWNlTGFzdEVsZW1lbnQoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VMYXN0RWxlbWVudFZhbHVlKCl1aW50MTZbXSIKCW1ldGhvZCAic3BsaWNlRmlyc3RFbGVtZW50KCl1aW50MTZbXSIKCW1ldGhvZCAic3BsaWNlRmlyc3RFbGVtZW50VmFsdWUoKXVpbnQxNltdIgoJbWV0aG9kICJzdHJpbmdSZXR1cm4oKXN0cmluZyIKCW1ldGhvZCAic3RyaW5nQXJnKHN0cmluZyl2b2lkIgoJbWV0aG9kICJzdHJpbmdJblR1cGxlKCkodWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W10pIgoJbWV0aG9kICJhY2Nlc1N0cmluZ0luVHVwbGUoKXN0cmluZyIKCW1ldGhvZCAidXBkYXRlU3RyaW5nSW5UdXBsZSgpKHVpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdKSIKCW1ldGhvZCAidXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcygpKHVpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdKSIKCW1ldGhvZCAic2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZSgpKHVpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdKSIKCW1ldGhvZCAibmFtZWRUdXBsZSgpc3RyaW5nIgoJbWV0aG9kICJ1cGRhdGVOYW1lZFR1cGxlKClzdHJpbmciCgltZXRob2QgImN1c3RvbVR5cGVzKClzdHJpbmciCgltZXRob2QgInN0YXRpY1N0cmluZ0FycmF5QXJnKHN0cmluZ1szXSlzdHJpbmciCgltZXRob2QgImR5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheShzdHJpbmdbM10pc3RyaW5nIgoJbWV0aG9kICJkeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUoKSh1aW50MTYsdWludDhbXSx1aW50MTYpIgoJbWV0aG9kICJhY2Nlc3NEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUoKXVpbnQ4W10iCgltZXRob2QgImFjY2Vzc0R5bmFtaWNBcnJheUVsZW1lbnRJblR1cGxlKCl1aW50MzIiCgltZXRob2QgInVwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSgpKHVpbnQxNix1aW50OFtdLHVpbnQxNikiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfc3RhdGljQXJyYXkgYWJpX3JvdXRlX3JldHVyblN0YXRpY0FycmF5IGFiaV9yb3V0ZV9zdGF0aWNBcnJheUFyZyBhYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5RWxlbWVudHMgYWJpX3JvdXRlX21peGVkU3RhdGljQXJyYXlFbGVtZW50cyBhYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzIGFiaV9yb3V0ZV9zZXRTdGF0aWNBcnJheUVsZW1lbnQgYWJpX3JvdXRlX3N0YXRpY0FycmF5SW5TdG9yYWdlUmVmIGFiaV9yb3V0ZV91cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZiBhYmlfcm91dGVfc3RhdGljQXJyYXlJblN0b3JhZ2VNYXAgYWJpX3JvdXRlX3VwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlTWFwIGFiaV9yb3V0ZV9uZXN0ZWRTdGF0aWNBcnJheSBhYmlfcm91dGVfdXBkYXRlTmVzdGVkU3RhdGljQXJyYXlFbGVtZW50IGFiaV9yb3V0ZV91cGRhdGVOZXN0ZWRTdGF0aWNBcnJheSBhYmlfcm91dGVfdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5IGFiaV9yb3V0ZV9zaW1wbGVUdXBsZSBhYmlfcm91dGVfYXJyYXlJblR1cGxlIGFiaV9yb3V0ZV90dXBsZUluQXJyYXkgYWJpX3JvdXRlX3R1cGxlSW5UdXBsZSBhYmlfcm91dGVfc2hvcnRUeXBlTm90YXRpb24gYWJpX3JvdXRlX2Rpc2d1c3RpbmcgYWJpX3JvdXRlX3JldHVyblR1cGxlIGFiaV9yb3V0ZV90dXBsZUFyZyBhYmlfcm91dGVfZHluYW1pY0FycmF5IGFiaV9yb3V0ZV9yZXR1cm5EeW5hbWljQXJyYXkgYWJpX3JvdXRlX2R5bmFtaWNBcnJheUFyZyBhYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5RWxlbWVudCBhYmlfcm91dGVfZHluYW1pY1R1cGxlQXJyYXkgYWJpX3JvdXRlX3JldHVyblR1cGxlV2l0aER5YW1pY0FycmF5IGFiaV9yb3V0ZV9yZXR1cm5EeW5hbWljQXJyYXlGcm9tVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluVHVwbGUgYWJpX3JvdXRlX25vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGUgYWJpX3JvdXRlX2FycmF5UHVzaCBhYmlfcm91dGVfYXJyYXlQb3AgYWJpX3JvdXRlX2FycmF5UG9wVmFsdWUgYWJpX3JvdXRlX2FycmF5U3BsaWNlIGFiaV9yb3V0ZV9hcnJheVNwbGljZVZhbHVlIGFiaV9yb3V0ZV9keW5hbWljQXJyYXlFbGVtZW50cyBhYmlfcm91dGVfc3BsaWNlTGFzdEVsZW1lbnQgYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50VmFsdWUgYWJpX3JvdXRlX3NwbGljZUZpcnN0RWxlbWVudCBhYmlfcm91dGVfc3BsaWNlRmlyc3RFbGVtZW50VmFsdWUgYWJpX3JvdXRlX3N0cmluZ1JldHVybiBhYmlfcm91dGVfc3RyaW5nQXJnIGFiaV9yb3V0ZV9zdHJpbmdJblR1cGxlIGFiaV9yb3V0ZV9hY2Nlc1N0cmluZ0luVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZVN0cmluZ0luVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZVR1cGxlV2l0aE9ubHlEeW5hbWljVHlwZXMgYWJpX3JvdXRlX3Nob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGUgYWJpX3JvdXRlX25hbWVkVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZU5hbWVkVHVwbGUgYWJpX3JvdXRlX2N1c3RvbVR5cGVzIGFiaV9yb3V0ZV9zdGF0aWNTdHJpbmdBcnJheUFyZyBhYmlfcm91dGVfZHluYW1pY0FjY2Vzc09mRHluYW1pY0VsZW1lbnRJblN0YXRpY0FycmF5IGFiaV9yb3V0ZV9keW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUgYWJpX3JvdXRlX2FjY2Vzc0R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSBhYmlfcm91dGVfYWNjZXNzRHluYW1pY0FycmF5RWxlbWVudEluVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQ==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"AbiTest","desc":"","methods":[{"name":"staticArray","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"returnStaticArray","args":[],"desc":"","returns":{"type":"uint64[3]","desc":""}},{"name":"staticArrayArg","args":[{"name":"a","type":"uint64[3]","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"nonLiteralStaticArrayElements","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"mixedStaticArrayElements","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"nonLiteralStaticArrayAccess","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"setStaticArrayElement","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"staticArrayInStorageRef","args":[],"desc":"","returns":{"type":"uint64[3]","desc":""}},{"name":"updateStaticArrayInStorageRef","args":[],"desc":"","returns":{"type":"uint64[3]","desc":""}},{"name":"staticArrayInStorageMap","args":[],"desc":"","returns":{"type":"uint64[3]","desc":""}},{"name":"updateStaticArrayInStorageMap","args":[],"desc":"","returns":{"type":"uint64[3]","desc":""}},{"name":"nestedStaticArray","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"updateNestedStaticArrayElement","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"updateNestedStaticArray","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"threeDimensionalUint16Array","args":[],"desc":"","returns":{"type":"uint16","desc":""}},{"name":"simpleTuple","args":[],"desc":"","returns":{"type":"uint16","desc":""}},{"name":"arrayInTuple","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"tupleInArray","args":[],"desc":"","returns":{"type":"uint16","desc":""}},{"name":"tupleInTuple","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"shortTypeNotation","args":[],"desc":"","returns":{"type":"uint16","desc":""}},{"name":"disgusting","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"returnTuple","args":[],"desc":"","returns":{"type":"(uint64,uint16,uint64)","desc":""}},{"name":"tupleArg","args":[{"name":"a","type":"(uint64,uint16,uint64)","desc":""}],"desc":"","returns":{"type":"uint16","desc":""}},{"name":"dynamicArray","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"returnDynamicArray","args":[],"desc":"","returns":{"type":"uint64[]","desc":""}},{"name":"dynamicArrayArg","args":[{"name":"a","type":"uint64[]","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"updateDynamicArrayElement","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"dynamicTupleArray","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"returnTupleWithDyamicArray","args":[],"desc":"","returns":{"type":"(uint64,uint16,uint64[],uint16[])","desc":""}},{"name":"returnDynamicArrayFromTuple","args":[],"desc":"","returns":{"type":"uint8[]","desc":""}},{"name":"updateDynamicArrayInTuple","args":[],"desc":"","returns":{"type":"(uint8,uint16[],uint8[],uint16[],uint8[])","desc":""}},{"name":"nonLiteralDynamicElementInTuple","args":[],"desc":"","returns":{"type":"(uint8,uint16,uint8[],uint16[],uint8[])","desc":""}},{"name":"arrayPush","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"arrayPop","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"arrayPopValue","args":[],"desc":"","returns":{"type":"uint16","desc":""}},{"name":"arraySplice","args":[],"desc":"","returns":{"type":"uint64[]","desc":""}},{"name":"arraySpliceValue","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"dynamicArrayElements","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"spliceLastElement","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"spliceLastElementValue","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"spliceFirstElement","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"spliceFirstElementValue","args":[],"desc":"","returns":{"type":"uint16[]","desc":""}},{"name":"stringReturn","args":[],"desc":"","returns":{"type":"string","desc":""}},{"name":"stringArg","args":[{"name":"s","type":"string","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"stringInTuple","args":[],"desc":"","returns":{"type":"(uint16,uint8[],string,uint8[])","desc":""}},{"name":"accesStringInTuple","args":[],"desc":"","returns":{"type":"string","desc":""}},{"name":"updateStringInTuple","args":[],"desc":"","returns":{"type":"(uint8,uint16[],string,uint16[],uint8[])","desc":""}},{"name":"updateTupleWithOnlyDynamicTypes","args":[],"desc":"","returns":{"type":"(uint16[],uint16[],uint16[])","desc":""}},{"name":"shortenDynamicElementInTuple","args":[],"desc":"","returns":{"type":"(uint16[],uint16[],uint16[])","desc":""}},{"name":"namedTuple","args":[],"desc":"","returns":{"type":"string","desc":""}},{"name":"updateNamedTuple","args":[],"desc":"","returns":{"type":"string","desc":""}},{"name":"customTypes","args":[],"desc":"","returns":{"type":"string","desc":""}},{"name":"staticStringArrayArg","args":[{"name":"a","type":"string[3]","desc":""}],"desc":"","returns":{"type":"string","desc":""}},{"name":"dynamicAccessOfDynamicElementInStaticArray","args":[{"name":"a","type":"string[3]","desc":""}],"desc":"","returns":{"type":"string","desc":""}},{"name":"dynamicArrayInMiddleOfTuple","args":[],"desc":"","returns":{"type":"(uint16,uint8[],uint16)","desc":""}},{"name":"accessDynamicArrayInMiddleOfTuple","args":[],"desc":"","returns":{"type":"uint8[]","desc":""}},{"name":"accessDynamicArrayElementInTuple","args":[],"desc":"","returns":{"type":"uint32","desc":""}},{"name":"updateDynamicArrayInMiddleOfTuple","args":[],"desc":"","returns":{"type":"(uint16,uint8[],uint16)","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "staticArray()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "returnStaticArray()uint64[3]": { + "call_config": { + "no_op": "CALL" + } + }, + "staticArrayArg(uint64[3])uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "nonLiteralStaticArrayElements()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "mixedStaticArrayElements()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "nonLiteralStaticArrayAccess()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "setStaticArrayElement()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "staticArrayInStorageRef()uint64[3]": { + "call_config": { + "no_op": "CALL" + } + }, + "updateStaticArrayInStorageRef()uint64[3]": { + "call_config": { + "no_op": "CALL" + } + }, + "staticArrayInStorageMap()uint64[3]": { + "call_config": { + "no_op": "CALL" + } + }, + "updateStaticArrayInStorageMap()uint64[3]": { + "call_config": { + "no_op": "CALL" + } + }, + "nestedStaticArray()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "updateNestedStaticArrayElement()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "updateNestedStaticArray()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "threeDimensionalUint16Array()uint16": { + "call_config": { + "no_op": "CALL" + } + }, + "simpleTuple()uint16": { + "call_config": { + "no_op": "CALL" + } + }, + "arrayInTuple()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "tupleInArray()uint16": { + "call_config": { + "no_op": "CALL" + } + }, + "tupleInTuple()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "shortTypeNotation()uint16": { + "call_config": { + "no_op": "CALL" + } + }, + "disgusting()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "returnTuple()(uint64,uint16,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "tupleArg((uint64,uint16,uint64))uint16": { + "call_config": { + "no_op": "CALL" + } + }, + "dynamicArray()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "returnDynamicArray()uint64[]": { + "call_config": { + "no_op": "CALL" + } + }, + "dynamicArrayArg(uint64[])uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "updateDynamicArrayElement()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "dynamicTupleArray()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "returnTupleWithDyamicArray()(uint64,uint16,uint64[],uint16[])": { + "call_config": { + "no_op": "CALL" + } + }, + "returnDynamicArrayFromTuple()uint8[]": { + "call_config": { + "no_op": "CALL" + } + }, + "updateDynamicArrayInTuple()(uint8,uint16[],uint8[],uint16[],uint8[])": { + "call_config": { + "no_op": "CALL" + } + }, + "nonLiteralDynamicElementInTuple()(uint8,uint16,uint8[],uint16[],uint8[])": { + "call_config": { + "no_op": "CALL" + } + }, + "arrayPush()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "arrayPop()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "arrayPopValue()uint16": { + "call_config": { + "no_op": "CALL" + } + }, + "arraySplice()uint64[]": { + "call_config": { + "no_op": "CALL" + } + }, + "arraySpliceValue()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "dynamicArrayElements()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "spliceLastElement()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "spliceLastElementValue()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "spliceFirstElement()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "spliceFirstElementValue()uint16[]": { + "call_config": { + "no_op": "CALL" + } + }, + "stringReturn()string": { + "call_config": { + "no_op": "CALL" + } + }, + "stringArg(string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "stringInTuple()(uint16,uint8[],string,uint8[])": { + "call_config": { + "no_op": "CALL" + } + }, + "accesStringInTuple()string": { + "call_config": { + "no_op": "CALL" + } + }, + "updateStringInTuple()(uint8,uint16[],string,uint16[],uint8[])": { + "call_config": { + "no_op": "CALL" + } + }, + "updateTupleWithOnlyDynamicTypes()(uint16[],uint16[],uint16[])": { + "call_config": { + "no_op": "CALL" + } + }, + "shortenDynamicElementInTuple()(uint16[],uint16[],uint16[])": { + "call_config": { + "no_op": "CALL" + } + }, + "namedTuple()string": { + "call_config": { + "no_op": "CALL" + } + }, + "updateNamedTuple()string": { + "call_config": { + "no_op": "CALL" + } + }, + "customTypes()string": { + "call_config": { + "no_op": "CALL" + } + }, + "staticStringArrayArg(string[3])string": { + "call_config": { + "no_op": "CALL" + } + }, + "dynamicAccessOfDynamicElementInStaticArray(string[3])string": { + "call_config": { + "no_op": "CALL" + } + }, + "dynamicArrayInMiddleOfTuple()(uint16,uint8[],uint16)": { + "call_config": { + "no_op": "CALL" + } + }, + "accessDynamicArrayInMiddleOfTuple()uint8[]": { + "call_config": { + "no_op": "CALL" + } + }, + "accessDynamicArrayElementInTuple()uint32": { + "call_config": { + "no_op": "CALL" + } + }, + "updateDynamicArrayInMiddleOfTuple()(uint16,uint8[],uint16)": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": { + "opt_in": "CALL", + "no_op": "CREATE" + }, + "schema": { + "local": { + "declared": { + "lRef": { + "type": "bytes", + "key": "lRef" + }, + "lMap": { + "type": "bytes", + "key": "lMap" + } + }, + "reserved": {} + }, + "global": { + "declared": { + "gRef": { + "type": "bytes", + "key": "gRef" + }, + "gMap": { + "type": "bytes", + "key": "gMap" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 2, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 2, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDMgMQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gaGVhZCBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQgb2YgZWxlbWVudAoJaW50IDAKCXN3YXAKCWV4dHJhY3QzIC8vIGV4dHJhY3QgcG9ydGlvbiBvZiB0dXBsZSBiZWZvcmUgZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIG5ldyB0dXBsZSBlbGVtZW50Cgljb25jYXQKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0xIC8vIGhlYWQgb2Zmc2V0CglleHRyYWN0X3VpbnQxNiAvLyBleHRyYWN0IGR5bmFtaWMgYXJyYXkgb2Zmc2V0IG9mIGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCSsKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsZW4KCXN1YnN0cmluZzMKCWNvbmNhdAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCTwKCWJueiBzd2FwcGVkX2RpZmZlcmVuY2UKCWZyYW1lX2RpZyAtMiAvLyBuZXcgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBuZXcgZWxlbWVudAoJZnJhbWVfZGlnIC0zIC8vIG9sZCBlbGVtZW50IGxlbmd0aAoJaW50IDEKCXN0b3JlIDcgLy8gc3VidHJhY3QgaGVhZCBkaWZmZXJlbmNlCgliIGdldF9kaWZmZXJlbmNlCgpzd2FwcGVkX2RpZmZlcmVuY2U6CglmcmFtZV9kaWcgLTMgLy8gb2xkIGVsZW1lbnQgbGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWludCAwCglzdG9yZSA3IC8vIHN1YnRyYWN0IGhlYWQgZGlmZmVyZW5jZQoKZ2V0X2RpZmZlcmVuY2U6CgktIC8vIGdldCBsZW5ndGggZGlmZmVyZW5jZQoJcmV0c3ViCgp1cGRhdGVfZHluYW1pY19oZWFkOgoJcHJvdG8gMiAwCglmcmFtZV9kaWcgLTIgLy8gbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gZHluYW1pYyBhcnJheSBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQKCWxvYWQgNyAvLyBzdWJ0cmFjdCBoZWFkIGRpZmZlcmVuY2UKCWJ6IHN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZQoJKyAvLyBhZGQgZGlmZmVyZW5jZSB0byBvZmZzZXQKCWIgZW5kX2NhbGNfbmV3X2hlYWQKCnN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZToKCXN3YXAKCS0gLy8gc3VidHJhY3QgZGlmZmVyZW5jZSBmcm9tIG9mZmV0CgplbmRfY2FsY19uZXdfaGVhZDoKCWl0b2IgLy8gY29udmVydCB0byBieXRlcwoJZXh0cmFjdCA2IDIgLy8gY29udmVydCB0byB1aW50MTYKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglzd2FwCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0Cglzd2FwCglyZXBsYWNlMyAvLyB1cGRhdGUgb2Zmc2V0CglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCXJldHN1YgoKcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJZHVwCglsZW4KCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2J1cnkgLTIgLy8gaGVhZCBvZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDQgMwoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBlbGVtZW50Cgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYmFyZV9yb3V0ZV9PcHRJbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBPcHRJbgoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgb3B0SW4KCWludCAxCglyZXR1cm4KCm9wdEluOgoJcHJvdG8gMCAwCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBzdGF0aWNBcnJheQoJaW50IDEKCXJldHVybgoKc3RhdGljQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjkKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RhdGljQXJyYXlBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgc3RhdGljQXJyYXlBcmcKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5QXJnOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwbiAzCgljYWxsc3ViIG5vbkxpdGVyYWxTdGF0aWNBcnJheUVsZW1lbnRzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NQoJLy8gbjEgPSAxMQoJaW50IDExCglmcmFtZV9idXJ5IC0xIC8vIG4xOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDYKCS8vIG4yID0gMjIKCWludCAyMgoJZnJhbWVfYnVyeSAtMiAvLyBuMjogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ3CgkvLyBuMyA9IDMzCglpbnQgMzMKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFtuMSwgbjIsIG4zXQoJZnJhbWVfZGlnIC0xIC8vIG4xOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9taXhlZFN0YXRpY0FycmF5RWxlbWVudHM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cG4gMwoJY2FsbHN1YiBtaXhlZFN0YXRpY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCm1peGVkU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NAoJLy8gbjEgPSAzCglpbnQgMwoJZnJhbWVfYnVyeSAtMSAvLyBuMTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU1CgkvLyBuMiA9IDQKCWludCA0CglmcmFtZV9idXJ5IC0yIC8vIG4yOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTYKCS8vIG4zID0gNQoJaW50IDUKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NwoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCA5PiA9IFswLCAxLCAyLCBuMSwgbjIsIG4zLCA2LCA3LCA4XQoJaW50IDAKCWl0b2IKCWludCAxCglpdG9iCgljb25jYXQKCWludCAyCglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBuMTogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWludCA2CglpdG9iCgljb25jYXQKCWludCA3CglpdG9iCgljb25jYXQKCWludCA4CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzldCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU5CgkvLyByZXR1cm4gYVsxXSArIGFbNF0gKyBhWzddOwoJZnJhbWVfZGlnIC00IC8vIGE6IHVpbnQ2NFs5XQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbOV0KCWludCA0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCgkrCglmcmFtZV9kaWcgLTQgLy8gYTogdWludDY0WzldCglpbnQgNwoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJKwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3M6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NjMKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NAoJLy8gbiA9IDIKCWludCAyCglmcmFtZV9idXJ5IC0yIC8vIG46IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NgoJLy8gcmV0dXJuIGFbbl07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglmcmFtZV9kaWcgLTIgLy8gbjogdWludDY0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2V0U3RhdGljQXJyYXlFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzAKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo3MgoJLy8gYVsxXSA9IDIyMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMjIyCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzQKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgc3RhdGljQXJyYXlJblN0b3JhZ2VSZWYKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjc4CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODAKCS8vIHRoaXMuZ1JlZi5wdXQoYSkKCWJ5dGUgImdSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MQoJLy8gdGhpcy5sUmVmLnB1dCh0aGlzLnR4bi5zZW5kZXIsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MgoJLy8gdGhpcy5iUmVmLnB1dChhKQoJYnl0ZSAiYlJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODQKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdSZWYiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiUmVmIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjkwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmCglpbnQgMQoJcmV0dXJuCgp1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo5NAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjk2CgkvLyB0aGlzLmdSZWYucHV0KGEpCglieXRlICJnUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTcKCS8vIHRoaXMubFJlZi5wdXQodGhpcy50eG4uc2VuZGVyLCBhKQoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTgKCS8vIHRoaXMuYlJlZi5wdXQoYSkKCWJ5dGUgImJSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwMAoJLy8gdGhpcy5nUmVmLmdldCgpWzFdID0gMTExCglieXRlICJnUmVmIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMQoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImdSZWYiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMDEKCS8vIHRoaXMubFJlZi5nZXQodGhpcy50eG4uc2VuZGVyKVsxXSA9IDIyMgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyMgoJaXRvYgoJcmVwbGFjZTMKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCgl1bmNvdmVyIDIKCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTAyCgkvLyB0aGlzLmJSZWYuZ2V0KClbMV0gPSAzMzMKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMwoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImJSZWYiCglzd2FwCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwNAoJLy8gcmV0OiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWwoJYnl0ZSAiZ1JlZiIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTIgLy8gcmV0OiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTEwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHN0YXRpY0FycmF5SW5TdG9yYWdlTWFwCglpbnQgMQoJcmV0dXJuCgpzdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTQKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTYKCS8vIHRoaXMuZ01hcC5wdXQoJ2dNYXAnLCBhKQoJYnl0ZSAiZ01hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9nbG9iYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExNwoJLy8gdGhpcy5sTWFwLnB1dCh0aGlzLnR4bi5zZW5kZXIsICdsTWFwJywgYSkKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfbG9jYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExOAoJLy8gdGhpcy5iTWFwLnB1dCgnYk1hcCcsIGEpCglieXRlICJiTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMjAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEyNgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiB1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZU1hcAoJaW50IDEKCXJldHVybgoKdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMwCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMyCgkvLyB0aGlzLmdNYXAucHV0KCdnTWFwJywgYSkKCWJ5dGUgImdNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzMKCS8vIHRoaXMubE1hcC5wdXQodGhpcy50eG4uc2VuZGVyLCAnbE1hcCcsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzQKCS8vIHRoaXMuYk1hcC5wdXQoJ2JNYXAnLCBhKQoJYnl0ZSAiYk1hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM2CgkvLyB0aGlzLmdNYXAuZ2V0KCdnTWFwJylbMV0gPSAxMTExCglieXRlICJnTWFwIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMTEKCWl0b2IKCXJlcGxhY2UzCglieXRlICJnTWFwIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM3CgkvLyB0aGlzLmxNYXAuZ2V0KHRoaXMudHhuLnNlbmRlciwgJ2xNYXAnKVsxXSA9IDIyMjIKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMjIyCglpdG9iCglyZXBsYWNlMwoJdHhuIFNlbmRlcgoJYnl0ZSAibE1hcCIKCXVuY292ZXIgMgoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzgKCS8vIHRoaXMuYk1hcC5nZXQoJ2JNYXAnKVsxXSA9IDMzMzMKCWJ5dGUgImJNYXAiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMzMKCWl0b2IKCXJlcGxhY2UzCglieXRlICJiTWFwIgoJc3dhcAoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbmVzdGVkU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgbmVzdGVkU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCm5lc3RlZFN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MAoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDY0LCAzPiwgMz4gPSBbWzExLCAyMiwgMzNdLCBbNDQsIDU1LCA2Nl0sIFs3NywgODgsIDk5XV0KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglpbnQgNDQKCWl0b2IKCWludCA1NQoJaXRvYgoJY29uY2F0CglpbnQgNjYKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWludCA4OAoJaXRvYgoJY29uY2F0CglpbnQgOTkKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTIKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheUVsZW1lbnQKCWludCAxCglyZXR1cm4KCnVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTYKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU4CgkvLyBhWzFdWzFdID0gNTU1CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA1NTUKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjAKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5CglpbnQgMQoJcmV0dXJuCgp1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjQKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTY2CgkvLyBhWzFdID0gWzQ0NCwgNTU1LCA2NjZdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgNDQ0CglpdG9iCglpbnQgNTU1CglpdG9iCgljb25jYXQKCWludCA2NjYKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdWzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2OAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHRocmVlRGltZW5zaW9uYWxVaW50MTZBcnJheQoJaW50IDEKCXJldHVybgoKdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE3MgoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDE2LCAyPiwgMj4sIDI+ID0gWwoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDY2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzYKCS8vIGFbMV1bMV0gPSBbNzc3LCA4ODhdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2WzJdWzJdWzJdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAxCglpbnQgNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDc3NwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA4ODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzgKCS8vIHJldHVybiBhWzFdWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCAxCglpbnQgMiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NpbXBsZVR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNpbXBsZVR1cGxlCglpbnQgMQoJcmV0dXJuCgpzaW1wbGVUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxODIKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0LCB1aW50MTZdID0gWzExLCAyMiwgMzMsIDQ0XQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAxNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0LHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTg0CgkvLyByZXR1cm4gYVszXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjQsdWludDE2XQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxOAoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2FycmF5SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhcnJheUluVHVwbGUKCWludCAxCglyZXR1cm4KCmFycmF5SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxODgKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgU3RhdGljQXJyYXk8dWludDY0LCAyPiwgdWludDE2XSA9IFsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMWMgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDExCglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMzCglpdG9iCglpbnQgNDQKCWl0b2IKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNTUKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbMl0sdWludDE2XQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxOTIKCS8vIHJldHVybiBhWzJdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NFsyXSx1aW50MTZdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEwCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdHVwbGVJbkFycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHR1cGxlSW5BcnJheQoJaW50IDEKCXJldHVybgoKdHVwbGVJbkFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE5NgoJLy8gYTogU3RhdGljQXJyYXk8W3VpbnQ2NCwgdWludDE2XSwgMj4gPSBbCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMQoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwYSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNl1bMl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjAwCgkvLyByZXR1cm4gYVsxXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNl1bMl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMQoJaW50IDEwIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3R1cGxlSW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB0dXBsZUluVHVwbGUKCWludCAxCglyZXR1cm4KCnR1cGxlSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMDQKCS8vIGE6IFt1aW50MTYsIHVpbnQxNiwgW3VpbnQ2NCwgdWludDE2XSwgW3VpbnQxNiwgdWludDY0XV0gPSBbCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDE4IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAzMwoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCA1NQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDY2CglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50MTYsW3VpbnQ2NCx1aW50MTZdLFt1aW50MTYsdWludDY0XV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjA4CgkvLyByZXR1cm4gYVszXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQxNixbdWludDY0LHVpbnQxNl0sW3VpbnQxNix1aW50NjRdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxNAoJaW50IDIKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc2hvcnRUeXBlTm90YXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2hvcnRUeXBlTm90YXRpb24KCWludCAxCglyZXR1cm4KCnNob3J0VHlwZU5vdGF0aW9uOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIxMgoJLy8gYTogW3VpbnQxNjwyPiwgdWludDY0PDI+LCB1aW50MTY8Mj5dID0gWwoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAxOCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMzCglpdG9iCglpbnQgNDQKCWl0b2IKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNTUKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNjYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0WzJdLHVpbnQxNlsyXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjE2CgkvLyByZXR1cm4gYVsyXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2WzJdLHVpbnQ2NFsyXSx1aW50MTZbMl1dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIwCglpbnQgMQoJaW50IDIgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9kaXNndXN0aW5nOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGRpc2d1c3RpbmcKCWludCAxCglyZXR1cm4KCmRpc2d1c3Rpbmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjIwCgkvLyBhOiBTdGF0aWNBcnJheTxbdWludDE2PDI+LCB1aW50NjQsIFt1aW50MTYsIHVpbnQ2NF0sIFN0YXRpY0FycmF5PHVpbnQ2NDwyPiwgMj5dLCAyPiA9IFsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMzYgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAzMwoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCA0NAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDU1CglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNjYKCWl0b2IKCWludCA3NwoJaXRvYgoJY29uY2F0CglpbnQgODgKCWl0b2IKCWludCA5OQoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDM2IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMTEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMjIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAzMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwYSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgNDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNTU1CglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNjY2CglpdG9iCglpbnQgNzc3CglpdG9iCgljb25jYXQKCWludCA4ODgKCWl0b2IKCWludCA5OTkKCWl0b2IKCWNvbmNhdAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIyNQoJLy8gYVsxXVszXVsxXSA9IFs4ODg4LCA5OTk5XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCWludCA1NCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyCgkrCglpbnQgMQoJaW50IDE2IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgODg4OAoJaXRvYgoJaW50IDk5OTkKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNlsyXSx1aW50NjQsW3VpbnQxNix1aW50NjRdLHVpbnQ2NFsyXVsyXV1bMl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjI2CgkvLyByZXR1cm4gYVsxXVszXVsxXVswXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2WzJdLHVpbnQ2NCxbdWludDE2LHVpbnQ2NF0sdWludDY0WzJdWzJdXVsyXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgNTQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMgoJKwoJaW50IDEKCWludCAxNiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDAKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVyblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHJldHVyblR1cGxlCglpbnQgMQoJcmV0dXJuCgpyZXR1cm5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMzAKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0XSA9IFsxMSwgMjIsIDMzXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAxMiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NF0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjMxCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90dXBsZUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiB0dXBsZUFyZwoJaW50IDEKCXJldHVybgoKdHVwbGVBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjM1CgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDgKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9keW5hbWljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgZHluYW1pY0FycmF5CglpbnQgMQoJcmV0dXJuCgpkeW5hbWljQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjM5CgkvLyBhOiB1aW50NjRbXSA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjQxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuRHluYW1pY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHJldHVybkR5bmFtaWNBcnJheQoJaW50IDEKCXJldHVybgoKcmV0dXJuRHluYW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI0NQoJLy8gYTogdWludDY0W10gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI0NgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBcnJheUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBkeW5hbWljQXJyYXlBcmcKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBcnJheUFyZzoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNTAKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZUR5bmFtaWNBcnJheUVsZW1lbnQKCWludCAxCglyZXR1cm4KCnVwZGF0ZUR5bmFtaWNBcnJheUVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjU0CgkvLyBhOiB1aW50NjRbXSA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjU2CgkvLyBhWzFdID0gMjIyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglpbnQgMjIyCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNTgKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9keW5hbWljVHVwbGVBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBkeW5hbWljVHVwbGVBcnJheQoJaW50IDEKCXJldHVybgoKZHluYW1pY1R1cGxlQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjYyCgkvLyBhOiBbdWludDE2LCB1aW50NjRdW10gPSBbWzExLCAyMl0sIFszMywgNDRdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwYSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAyMgoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMGEgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDMzCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNDQKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50NjRdW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjY0CgkvLyByZXR1cm4gYVsxXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ2NF1bXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMTAgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblR1cGxlV2l0aER5YW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI2OAoJLy8gYTogW3VpbnQ2NCwgdWludDE2LCB1aW50NjRbXSwgdWludDE2W11dID0gWzEsIDIsIFszLCA0XSwgWzUsIDZdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwZSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWludCA0CglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCA1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjcwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiByZXR1cm5EeW5hbWljQXJyYXlGcm9tVHVwbGUKCWludCAxCglyZXR1cm4KCnJldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNzQKCS8vIGE6IFt1aW50OCwgdWludDE2LCB1aW50OFtdLCB1aW50MTZbXSwgdWludDhbXV0gPSBbMSwgMiwgWzMsIDRdLCBbNSwgNl0sIFs3LCA4XV0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDkgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNyAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA4CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI3NgoJLy8gcmV0dXJuIGFbNF07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDcKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlJblR1cGxlCglpbnQgMQoJcmV0dXJuCgp1cGRhdGVEeW5hbWljQXJyYXlJblR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4MAoJLy8gYTogW3VpbnQ4LCB1aW50MTZbXSwgdWludDhbXSwgdWludDE2W10sIHVpbnQ4W11dID0gWzksIFs4XSwgWzddLCBbNl0sIFs1XV0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDkgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNyAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCA4CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDcKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCA1CglpdG9iCglleHRyYWN0IDcgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4MgoJLy8gYVswXSA9IDk5IGFzIHVpbnQ4CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJaW50IDk5CglpdG9iCglleHRyYWN0IDcgMAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjgzCgkvLyBhWzFdID0gWzEwLCAxMV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxMAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDEKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDMKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg0CgkvLyBhWzJdID0gWzEyLCAxM10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAzCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDMKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg1CgkvLyBhWzNdID0gWzE0LCAxNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA1Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg2CgkvLyBhWzRdID0gWzE2LCAxN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg4CgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIG5vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGUKCWludCAxCglyZXR1cm4KCm5vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGU6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjkyCgkvLyBlOiB1aW50MTZbXSA9IFs1LCA2XQoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBlOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyOTMKCS8vIGE6IFt1aW50OCwgdWludDE2LCB1aW50OFtdLCB1aW50MTZbXSwgdWludDhbXV0gPSBbMSwgMiwgWzMsIDRdLCBlLCBbNywgOF1dCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA5IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxCglpdG9iCglleHRyYWN0IDcgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgNAoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0xIC8vIGU6IHVpbnQxNltdCgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA4CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI5NQoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVB1c2g6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQdXNoCglpbnQgMQoJcmV0dXJuCgphcnJheVB1c2g6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjk5CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMDEKCS8vIGEucHVzaCgzIGFzIHVpbnQxNikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJZXh0cmFjdCAyIDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzAzCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYXJyYXlQb3A6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQb3AKCWludCAxCglyZXR1cm4KCmFycmF5UG9wOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwNwoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwOQoJLy8gYS5wb3AoKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTEKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVBvcFZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgYXJyYXlQb3BWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlQb3BWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTUKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTcKCS8vIHYgPSBhLnBvcCgpIQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZHVwCglsZW4KCWludCAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWNvdmVyIDIKCWV4dHJhY3QzCglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC0yIC8vIHY6IHVpbnQxNgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTkKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNgoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhcnJheVNwbGljZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2U6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzIzCgkvLyBhOiB1aW50NjRbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWludCAyCglpdG9iCgljb25jYXQKCWludCAzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzI1CgkvLyBhLnNwbGljZSgxLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDEKCWludCA4CgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDgKCSoKCWludCA4CgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMjcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZVZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDMKCWNhbGxzdWIgYXJyYXlTcGxpY2VWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2VWYWx1ZToKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzEKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgOAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAxMAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMGEKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzMKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzM0CgkvLyBsID0gNwoJaW50IDcKCWZyYW1lX2J1cnkgLTMgLy8gbDogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNQoJLy8gdiA9IGEuc3BsaWNlKGksIGwpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJZnJhbWVfZGlnIC0zIC8vIGw6IHVpbnQ2NAoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpdG9iCglleHRyYWN0IDYgMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWludCAyCgktCglleHRyYWN0MwoJY29uY2F0Cglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC00IC8vIHY6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNwoJLy8gcmV0dXJuIHY7CglmcmFtZV9kaWcgLTQgLy8gdjogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBcnJheUVsZW1lbnRzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgZHluYW1pY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBcnJheUVsZW1lbnRzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MQoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MgoJLy8gbmV3QTogdWludDE2W10gPSBbYVswXSwgYVsxXSwgYVsyXV0KCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDAKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMQoJaW50IDIgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCWV4dHJhY3QzCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIG5ld0E6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0NAoJLy8gcmV0dXJuIG5ld0E7CglmcmFtZV9kaWcgLTIgLy8gbmV3QTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNwbGljZUxhc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNDgKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNTAKCS8vIGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1MgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50VmFsdWU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiBzcGxpY2VMYXN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudFZhbHVlOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1NgoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1OAoJLy8gdiA9IGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMTMgLy8gc3BsaWNlIGJ5dGUgbGVuZ3RoCglpbnQgMgoJLQoJZXh0cmFjdDMKCWNvbmNhdAoJc3dhcAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoJZnJhbWVfYnVyeSAtMiAvLyB2OiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjAKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3BsaWNlRmlyc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY0CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY2CgkvLyBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjgKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHNwbGljZUZpcnN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzIKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzQKCS8vIHYgPSBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJaW50IDIKCS0KCWV4dHJhY3QzCgljb25jYXQKCXN3YXAKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCWZyYW1lX2J1cnkgLTIgLy8gdjogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzc2CgkvLyByZXR1cm4gdjsKCWZyYW1lX2RpZyAtMiAvLyB2OiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RyaW5nUmV0dXJuOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIHN0cmluZ1JldHVybgoJaW50IDEKCXJldHVybgoKc3RyaW5nUmV0dXJuOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM4MAoJLy8gcmV0dXJuICdIZWxsbyBXb3JsZCEnOwoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0FyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgc3RyaW5nQXJnCglpbnQgMQoJcmV0dXJuCgpzdHJpbmdBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzg0CgkvLyBhc3NlcnQocyA9PT0gJ0hlbGxvIFdvcmxkIScpCglmcmFtZV9kaWcgLTEgLy8gczogYnl0ZXMKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3RyaW5nSW5UdXBsZQoJaW50IDEKCXJldHVybgoKc3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozODgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHN0cmluZywgdWludDhbXV0gPSBbMSwgWzJdLCAnSGVsbG8gV29ybGQhJywgWzNdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwOCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHN0cmluZyx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2FjY2VzU3RyaW5nSW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhY2Nlc1N0cmluZ0luVHVwbGUKCWludCAxCglyZXR1cm4KCmFjY2VzU3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTQKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHN0cmluZywgdWludDhbXV0gPSBbMSwgWzJdLCAnSGVsbG8gV29ybGQhJywgWzNdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwOCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHN0cmluZyx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTYKCS8vIGFzc2VydChhWzJdID09PSAnSGVsbG8gV29ybGQhJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDQKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzk4CgkvLyByZXR1cm4gYVsyXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDQKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVTdHJpbmdJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZVN0cmluZ0luVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZVN0cmluZ0luVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDAyCgkvLyBhOiBbdWludDgsIHVpbnQxNltdLCBzdHJpbmcsIHVpbnQxNltdLCB1aW50OFtdXSA9IFs5LCBbOF0sICdIaT8nLCBbNl0sIFs1XV0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDkgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNyAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCA4CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJYnl0ZSAiSGk/IgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDQKCS8vIGFbMF0gPSA5OSBhcyB1aW50OAoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJaW50IDk5CglpdG9iCglleHRyYWN0IDcgMAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDUKCS8vIGFbMV0gPSBbMTAsIDExXQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMQoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgMTAKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAxCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA2CgkvLyBhWzJdID0gJ0hlbGxvIFdvcmxkIScKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDMKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA3CgkvLyBhWzNdID0gWzE0LCAxNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDUKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDE0CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDE1CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgNQoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQwOAoJLy8gYVs0XSA9IFsxNiwgMTddCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZVR1cGxlV2l0aE9ubHlEeW5hbWljVHlwZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcwoJaW50IDEKCXJldHVybgoKdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTQKCS8vIGE6IFt1aW50MTZbXSwgdWludDE2W10sIHVpbnQxNltdXSA9IFtbMV0sIFsyXSwgWzNdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTYKCS8vIGFbMF0gPSBbNCwgNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDQKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTcKCS8vIGFbMV0gPSBbNiwgN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTgKCS8vIGFbMl0gPSBbOCwgOV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDQKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDgKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgOQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3Nob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZQoJaW50IDEKCXJldHVybgoKc2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjQKCS8vIGE6IFt1aW50MTZbXSwgdWludDE2W10sIHVpbnQxNltdXSA9IFtbMSwgMl0sIFsyLCAzXSwgWzMsIDRdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjYKCS8vIGFbMF0gPSBbNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglpbnQgMAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQyNwoJLy8gYVsxXSA9IFs2XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWludCAyCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA0CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDI4CgkvLyBhWzJdID0gWzddCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA0Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MzAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX25hbWVkVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgbmFtZWRUdXBsZQoJaW50IDEKCXJldHVybgoKbmFtZWRUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MzQKCS8vIGE6IHsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDQyCgkvLyByZXR1cm4gYS5iYXI7CglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5hbWVkVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlTmFtZWRUdXBsZQoJaW50IDEKCXJldHVybgoKdXBkYXRlTmFtZWRUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NDYKCS8vIGE6IHsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWJ5dGUgIkhpPyIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDU0CgkvLyBhLmJhciA9ICdIZWxsbyBXb3JsZCEnCglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDU2CgkvLyByZXR1cm4gYS5iYXI7CglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2N1c3RvbVR5cGVzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGN1c3RvbVR5cGVzCglpbnQgMQoJcmV0dXJuCgpjdXN0b21UeXBlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NjAKCS8vIGFhOiBDdXN0b21UeXBlID0gewoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJYnl0ZSAiSGk/IgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhYTogQ3VzdG9tVHlwZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NjUKCS8vIGFhLmJhciA9ICdIZWxsbyBXb3JsZCEnCglmcmFtZV9kaWcgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDY3CgkvLyByZXR1cm4gYWEuYmFyOwoJZnJhbWVfZGlnIC0xIC8vIGFhOiBDdXN0b21UeXBlCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNTdHJpbmdBcnJheUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBzdGF0aWNTdHJpbmdBcnJheUFyZwoJaW50IDEKCXJldHVybgoKc3RhdGljU3RyaW5nQXJyYXlBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDcxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMgoJKgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBkeW5hbWljQWNjZXNzT2ZEeW5hbWljRWxlbWVudEluU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NzUKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDc2CgkvLyByZXR1cm4gYVtpXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQoJaW50IDEKCXJldHVybgoKZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4MAoJLy8gYTogW3VpbnQxNiwgdWludDhbXSwgdWludDE2XSA9IFsxLCBbMl0sIDNdCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA2IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDgyCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGFjY2Vzc0R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQoJaW50IDEKCXJldHVybgoKYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4NgoJLy8gYTogW3VpbnQxNiwgdWludDhbXSwgdWludDE2XSA9IFsxLCBbMl0sIDNdCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA2IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDg4CgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2FjY2Vzc0R5bmFtaWNBcnJheUVsZW1lbnRJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGFjY2Vzc0R5bmFtaWNBcnJheUVsZW1lbnRJblR1cGxlCglpbnQgMQoJcmV0dXJuCgphY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OTIKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W11dID0gWzExLCBbMjIsIDMzLCA0NF1dCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA0IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDcgMAoJaW50IDMzCglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ5NAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWludCAxCglpbnQgMSAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCgkrCglpbnQgMQoJZXh0cmFjdDMKCWJ5dGUgMHhGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OTgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHVpbnQxNl0gPSBbMSwgWzJdLCAzXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwMAoJLy8gYVsxXSA9IFs0LCA1XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDQKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTAyCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE9wdEluCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfT3B0SW4KCnJvdXRlX2FiaToKCW1ldGhvZCAic3RhdGljQXJyYXkoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuU3RhdGljQXJyYXkoKXVpbnQ2NFszXSIKCW1ldGhvZCAic3RhdGljQXJyYXlBcmcodWludDY0WzNdKXVpbnQ2NCIKCW1ldGhvZCAibm9uTGl0ZXJhbFN0YXRpY0FycmF5RWxlbWVudHMoKXVpbnQ2NCIKCW1ldGhvZCAibWl4ZWRTdGF0aWNBcnJheUVsZW1lbnRzKCl1aW50NjQiCgltZXRob2QgIm5vbkxpdGVyYWxTdGF0aWNBcnJheUFjY2VzcygpdWludDY0IgoJbWV0aG9kICJzZXRTdGF0aWNBcnJheUVsZW1lbnQoKXVpbnQ2NCIKCW1ldGhvZCAic3RhdGljQXJyYXlJblN0b3JhZ2VSZWYoKXVpbnQ2NFszXSIKCW1ldGhvZCAidXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VSZWYoKXVpbnQ2NFszXSIKCW1ldGhvZCAic3RhdGljQXJyYXlJblN0b3JhZ2VNYXAoKXVpbnQ2NFszXSIKCW1ldGhvZCAidXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXAoKXVpbnQ2NFszXSIKCW1ldGhvZCAibmVzdGVkU3RhdGljQXJyYXkoKXVpbnQ2NCIKCW1ldGhvZCAidXBkYXRlTmVzdGVkU3RhdGljQXJyYXlFbGVtZW50KCl1aW50NjQiCgltZXRob2QgInVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5KCl1aW50NjQiCgltZXRob2QgInRocmVlRGltZW5zaW9uYWxVaW50MTZBcnJheSgpdWludDE2IgoJbWV0aG9kICJzaW1wbGVUdXBsZSgpdWludDE2IgoJbWV0aG9kICJhcnJheUluVHVwbGUoKXVpbnQ2NCIKCW1ldGhvZCAidHVwbGVJbkFycmF5KCl1aW50MTYiCgltZXRob2QgInR1cGxlSW5UdXBsZSgpdWludDY0IgoJbWV0aG9kICJzaG9ydFR5cGVOb3RhdGlvbigpdWludDE2IgoJbWV0aG9kICJkaXNndXN0aW5nKCl1aW50NjQiCgltZXRob2QgInJldHVyblR1cGxlKCkodWludDY0LHVpbnQxNix1aW50NjQpIgoJbWV0aG9kICJ0dXBsZUFyZygodWludDY0LHVpbnQxNix1aW50NjQpKXVpbnQxNiIKCW1ldGhvZCAiZHluYW1pY0FycmF5KCl1aW50NjQiCgltZXRob2QgInJldHVybkR5bmFtaWNBcnJheSgpdWludDY0W10iCgltZXRob2QgImR5bmFtaWNBcnJheUFyZyh1aW50NjRbXSl1aW50NjQiCgltZXRob2QgInVwZGF0ZUR5bmFtaWNBcnJheUVsZW1lbnQoKXVpbnQ2NCIKCW1ldGhvZCAiZHluYW1pY1R1cGxlQXJyYXkoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkoKSh1aW50NjQsdWludDE2LHVpbnQ2NFtdLHVpbnQxNltdKSIKCW1ldGhvZCAicmV0dXJuRHluYW1pY0FycmF5RnJvbVR1cGxlKCl1aW50OFtdIgoJbWV0aG9kICJ1cGRhdGVEeW5hbWljQXJyYXlJblR1cGxlKCkodWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdKSIKCW1ldGhvZCAibm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZSgpKHVpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W10pIgoJbWV0aG9kICJhcnJheVB1c2goKXVpbnQxNltdIgoJbWV0aG9kICJhcnJheVBvcCgpdWludDE2W10iCgltZXRob2QgImFycmF5UG9wVmFsdWUoKXVpbnQxNiIKCW1ldGhvZCAiYXJyYXlTcGxpY2UoKXVpbnQ2NFtdIgoJbWV0aG9kICJhcnJheVNwbGljZVZhbHVlKCl1aW50MTZbXSIKCW1ldGhvZCAiZHluYW1pY0FycmF5RWxlbWVudHMoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VMYXN0RWxlbWVudCgpdWludDE2W10iCgltZXRob2QgInNwbGljZUxhc3RFbGVtZW50VmFsdWUoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VGaXJzdEVsZW1lbnQoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZSgpdWludDE2W10iCgltZXRob2QgInN0cmluZ1JldHVybigpc3RyaW5nIgoJbWV0aG9kICJzdHJpbmdBcmcoc3RyaW5nKXZvaWQiCgltZXRob2QgInN0cmluZ0luVHVwbGUoKSh1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXSkiCgltZXRob2QgImFjY2VzU3RyaW5nSW5UdXBsZSgpc3RyaW5nIgoJbWV0aG9kICJ1cGRhdGVTdHJpbmdJblR1cGxlKCkodWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W10pIgoJbWV0aG9kICJ1cGRhdGVUdXBsZVdpdGhPbmx5RHluYW1pY1R5cGVzKCkodWludDE2W10sdWludDE2W10sdWludDE2W10pIgoJbWV0aG9kICJzaG9ydGVuRHluYW1pY0VsZW1lbnRJblR1cGxlKCkodWludDE2W10sdWludDE2W10sdWludDE2W10pIgoJbWV0aG9kICJuYW1lZFR1cGxlKClzdHJpbmciCgltZXRob2QgInVwZGF0ZU5hbWVkVHVwbGUoKXN0cmluZyIKCW1ldGhvZCAiY3VzdG9tVHlwZXMoKXN0cmluZyIKCW1ldGhvZCAic3RhdGljU3RyaW5nQXJyYXlBcmcoc3RyaW5nWzNdKXN0cmluZyIKCW1ldGhvZCAiZHluYW1pY0FjY2Vzc09mRHluYW1pY0VsZW1lbnRJblN0YXRpY0FycmF5KHN0cmluZ1szXSlzdHJpbmciCgltZXRob2QgImR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSgpKHVpbnQxNix1aW50OFtdLHVpbnQxNikiCgltZXRob2QgImFjY2Vzc0R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSgpdWludDhbXSIKCW1ldGhvZCAiYWNjZXNzRHluYW1pY0FycmF5RWxlbWVudEluVHVwbGUoKXVpbnQzMiIKCW1ldGhvZCAidXBkYXRlRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlKCkodWludDE2LHVpbnQ4W10sdWludDE2KSIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9zdGF0aWNBcnJheSBhYmlfcm91dGVfcmV0dXJuU3RhdGljQXJyYXkgYWJpX3JvdXRlX3N0YXRpY0FycmF5QXJnIGFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50cyBhYmlfcm91dGVfbWl4ZWRTdGF0aWNBcnJheUVsZW1lbnRzIGFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3MgYWJpX3JvdXRlX3NldFN0YXRpY0FycmF5RWxlbWVudCBhYmlfcm91dGVfc3RhdGljQXJyYXlJblN0b3JhZ2VSZWYgYWJpX3JvdXRlX3VwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmIGFiaV9yb3V0ZV9zdGF0aWNBcnJheUluU3RvcmFnZU1hcCBhYmlfcm91dGVfdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXAgYWJpX3JvdXRlX25lc3RlZFN0YXRpY0FycmF5IGFiaV9yb3V0ZV91cGRhdGVOZXN0ZWRTdGF0aWNBcnJheUVsZW1lbnQgYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5IGFiaV9yb3V0ZV90aHJlZURpbWVuc2lvbmFsVWludDE2QXJyYXkgYWJpX3JvdXRlX3NpbXBsZVR1cGxlIGFiaV9yb3V0ZV9hcnJheUluVHVwbGUgYWJpX3JvdXRlX3R1cGxlSW5BcnJheSBhYmlfcm91dGVfdHVwbGVJblR1cGxlIGFiaV9yb3V0ZV9zaG9ydFR5cGVOb3RhdGlvbiBhYmlfcm91dGVfZGlzZ3VzdGluZyBhYmlfcm91dGVfcmV0dXJuVHVwbGUgYWJpX3JvdXRlX3R1cGxlQXJnIGFiaV9yb3V0ZV9keW5hbWljQXJyYXkgYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheSBhYmlfcm91dGVfZHluYW1pY0FycmF5QXJnIGFiaV9yb3V0ZV91cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50IGFiaV9yb3V0ZV9keW5hbWljVHVwbGVBcnJheSBhYmlfcm91dGVfcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkgYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZSBhYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZSBhYmlfcm91dGVfbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZSBhYmlfcm91dGVfYXJyYXlQdXNoIGFiaV9yb3V0ZV9hcnJheVBvcCBhYmlfcm91dGVfYXJyYXlQb3BWYWx1ZSBhYmlfcm91dGVfYXJyYXlTcGxpY2UgYWJpX3JvdXRlX2FycmF5U3BsaWNlVmFsdWUgYWJpX3JvdXRlX2R5bmFtaWNBcnJheUVsZW1lbnRzIGFiaV9yb3V0ZV9zcGxpY2VMYXN0RWxlbWVudCBhYmlfcm91dGVfc3BsaWNlTGFzdEVsZW1lbnRWYWx1ZSBhYmlfcm91dGVfc3BsaWNlRmlyc3RFbGVtZW50IGFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZSBhYmlfcm91dGVfc3RyaW5nUmV0dXJuIGFiaV9yb3V0ZV9zdHJpbmdBcmcgYWJpX3JvdXRlX3N0cmluZ0luVHVwbGUgYWJpX3JvdXRlX2FjY2VzU3RyaW5nSW5UdXBsZSBhYmlfcm91dGVfdXBkYXRlU3RyaW5nSW5UdXBsZSBhYmlfcm91dGVfdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcyBhYmlfcm91dGVfc2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZSBhYmlfcm91dGVfbmFtZWRUdXBsZSBhYmlfcm91dGVfdXBkYXRlTmFtZWRUdXBsZSBhYmlfcm91dGVfY3VzdG9tVHlwZXMgYWJpX3JvdXRlX3N0YXRpY1N0cmluZ0FycmF5QXJnIGFiaV9yb3V0ZV9keW5hbWljQWNjZXNzT2ZEeW5hbWljRWxlbWVudEluU3RhdGljQXJyYXkgYWJpX3JvdXRlX2R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSBhYmlfcm91dGVfYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlIGFiaV9yb3V0ZV9hY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZSBhYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxl", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "AbiTest", + "desc": "", + "methods": [ + { + "name": "staticArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "returnStaticArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64[3]", + "desc": "" + } + }, + { + "name": "staticArrayArg", + "args": [ + { + "name": "a", + "type": "uint64[3]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "nonLiteralStaticArrayElements", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "mixedStaticArrayElements", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "nonLiteralStaticArrayAccess", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "setStaticArrayElement", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "staticArrayInStorageRef", + "args": [], + "desc": "", + "returns": { + "type": "uint64[3]", + "desc": "" + } + }, + { + "name": "updateStaticArrayInStorageRef", + "args": [], + "desc": "", + "returns": { + "type": "uint64[3]", + "desc": "" + } + }, + { + "name": "staticArrayInStorageMap", + "args": [], + "desc": "", + "returns": { + "type": "uint64[3]", + "desc": "" + } + }, + { + "name": "updateStaticArrayInStorageMap", + "args": [], + "desc": "", + "returns": { + "type": "uint64[3]", + "desc": "" + } + }, + { + "name": "nestedStaticArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "updateNestedStaticArrayElement", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "updateNestedStaticArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "threeDimensionalUint16Array", + "args": [], + "desc": "", + "returns": { + "type": "uint16", + "desc": "" + } + }, + { + "name": "simpleTuple", + "args": [], + "desc": "", + "returns": { + "type": "uint16", + "desc": "" + } + }, + { + "name": "arrayInTuple", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "tupleInArray", + "args": [], + "desc": "", + "returns": { + "type": "uint16", + "desc": "" + } + }, + { + "name": "tupleInTuple", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "shortTypeNotation", + "args": [], + "desc": "", + "returns": { + "type": "uint16", + "desc": "" + } + }, + { + "name": "disgusting", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "returnTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint64,uint16,uint64)", + "desc": "" + } + }, + { + "name": "tupleArg", + "args": [ + { + "name": "a", + "type": "(uint64,uint16,uint64)", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint16", + "desc": "" + } + }, + { + "name": "dynamicArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "returnDynamicArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64[]", + "desc": "" + } + }, + { + "name": "dynamicArrayArg", + "args": [ + { + "name": "a", + "type": "uint64[]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "updateDynamicArrayElement", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "dynamicTupleArray", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "returnTupleWithDyamicArray", + "args": [], + "desc": "", + "returns": { + "type": "(uint64,uint16,uint64[],uint16[])", + "desc": "" + } + }, + { + "name": "returnDynamicArrayFromTuple", + "args": [], + "desc": "", + "returns": { + "type": "uint8[]", + "desc": "" + } + }, + { + "name": "updateDynamicArrayInTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint8,uint16[],uint8[],uint16[],uint8[])", + "desc": "" + } + }, + { + "name": "nonLiteralDynamicElementInTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint8,uint16,uint8[],uint16[],uint8[])", + "desc": "" + } + }, + { + "name": "arrayPush", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "arrayPop", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "arrayPopValue", + "args": [], + "desc": "", + "returns": { + "type": "uint16", + "desc": "" + } + }, + { + "name": "arraySplice", + "args": [], + "desc": "", + "returns": { + "type": "uint64[]", + "desc": "" + } + }, + { + "name": "arraySpliceValue", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "dynamicArrayElements", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "spliceLastElement", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "spliceLastElementValue", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "spliceFirstElement", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "spliceFirstElementValue", + "args": [], + "desc": "", + "returns": { + "type": "uint16[]", + "desc": "" + } + }, + { + "name": "stringReturn", + "args": [], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "stringArg", + "args": [ + { + "name": "s", + "type": "string", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "stringInTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint16,uint8[],string,uint8[])", + "desc": "" + } + }, + { + "name": "accesStringInTuple", + "args": [], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "updateStringInTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint8,uint16[],string,uint16[],uint8[])", + "desc": "" + } + }, + { + "name": "updateTupleWithOnlyDynamicTypes", + "args": [], + "desc": "", + "returns": { + "type": "(uint16[],uint16[],uint16[])", + "desc": "" + } + }, + { + "name": "shortenDynamicElementInTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint16[],uint16[],uint16[])", + "desc": "" + } + }, + { + "name": "namedTuple", + "args": [], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "updateNamedTuple", + "args": [], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "customTypes", + "args": [], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "staticStringArrayArg", + "args": [ + { + "name": "a", + "type": "string[3]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "dynamicAccessOfDynamicElementInStaticArray", + "args": [ + { + "name": "a", + "type": "string[3]", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "string", + "desc": "" + } + }, + { + "name": "dynamicArrayInMiddleOfTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint16,uint8[],uint16)", + "desc": "" + } + }, + { + "name": "accessDynamicArrayInMiddleOfTuple", + "args": [], + "desc": "", + "returns": { + "type": "uint8[]", + "desc": "" + } + }, + { + "name": "accessDynamicArrayElementInTuple", + "args": [], + "desc": "", + "returns": { + "type": "uint32", + "desc": "" + } + }, + { + "name": "updateDynamicArrayInMiddleOfTuple", + "args": [], + "desc": "", + "returns": { + "type": "(uint16,uint8[],uint16)", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/AbiTest.src_map.json b/tests/contracts/AbiTest.src_map.json index 6898b4ff3..21438aed8 100644 --- a/tests/contracts/AbiTest.src_map.json +++ b/tests/contracts/AbiTest.src_map.json @@ -234,1521 +234,1521 @@ "232": 72, "233": 75, "234": 75, - "235": 76, - "236": 77, - "237": 78, - "238": 78, - "239": 79, - "240": 80, - "241": 81, - "242": 82, - "243": 83, - "244": 83, - "245": 83, - "246": 84, - "247": 85, - "248": 88, - "249": 88, - "250": 88, - "251": 89, - "252": 92, - "253": 92, - "254": 93, - "255": 94, - "256": 95, - "257": 95, - "258": 96, - "259": 97, - "260": 98, - "261": 99, - "262": 100, - "263": 100, - "264": 100, - "265": 101, - "266": 102, - "267": 105, - "268": 105, - "269": 105, - "270": 106, - "271": 109, - "272": 109, - "273": 110, - "274": 111, - "275": 112, - "276": 112, - "277": 113, - "278": 114, - "279": 115, - "280": 116, - "281": 117, - "282": 118, - "283": 118, - "284": 118, - "285": 119, - "286": 120, - "287": 123, - "288": 123, - "289": 123, - "290": 127, - "291": 127, - "292": 128, - "293": 129, - "294": 129, - "295": 130, - "296": 131, - "297": 132, - "298": 132, - "299": 133, - "300": 134, - "301": 135, - "302": 135, - "303": 139, - "304": 139, - "305": 140, - "306": 141, - "307": 142, - "308": 143, - "309": 144, - "310": 145, - "311": 146, - "312": 147, - "313": 148, - "314": 149, - "315": 150, - "316": 151, - "317": 154, - "318": 154, - "319": 155, - "320": 156, - "321": 157, - "322": 157, - "323": 158, - "324": 159, - "325": 160, - "326": 161, - "327": 162, - "328": 163, - "329": 163, - "330": 163, - "331": 164, - "332": 165, - "333": 168, - "334": 168, - "335": 168, - "336": 172, - "337": 172, - "338": 173, - "339": 174, - "340": 174, - "341": 175, - "342": 176, - "343": 177, - "344": 177, - "345": 178, - "346": 179, - "347": 180, - "348": 180, - "349": 184, - "350": 184, - "351": 185, - "352": 186, - "353": 187, - "354": 188, - "355": 189, - "356": 192, - "357": 192, - "358": 193, - "359": 194, - "360": 195, - "361": 195, - "362": 196, - "363": 197, - "364": 198, - "365": 199, - "366": 200, - "367": 200, - "368": 200, - "369": 201, - "370": 201, - "371": 201, - "372": 202, - "373": 203, - "374": 206, - "375": 206, - "376": 206, - "377": 210, - "378": 210, - "379": 211, - "380": 212, - "381": 213, - "382": 214, - "383": 215, - "384": 216, - "385": 217, - "386": 218, - "387": 219, - "388": 220, - "389": 221, - "390": 222, - "391": 225, - "392": 225, - "393": 226, - "394": 227, - "395": 228, - "396": 228, - "397": 229, - "398": 230, - "399": 231, - "400": 232, - "401": 233, - "402": 234, - "403": 234, - "404": 235, - "405": 235, - "406": 235, - "407": 236, - "408": 237, - "409": 240, - "410": 240, - "411": 240, - "412": 244, - "413": 244, - "414": 245, - "415": 245, - "416": 249, - "417": 249, - "418": 250, - "419": 250, - "420": 254, - "421": 254, - "422": 255, - "423": 255, - "424": 259, - "425": 259, - "426": 260, - "427": 261, - "428": 261, - "429": 262, - "430": 263, - "431": 264, - "432": 264, - "433": 265, - "434": 266, - "435": 267, - "436": 267, - "437": 271, - "438": 271, - "439": 272, - "440": 273, - "441": 274, - "442": 275, - "443": 276, - "444": 277, - "445": 278, - "446": 279, - "447": 280, - "448": 281, - "449": 282, - "450": 283, - "451": 286, - "452": 286, - "453": 287, - "454": 288, - "455": 289, - "456": 289, - "457": 290, - "458": 291, - "459": 292, - "460": 293, - "461": 294, - "462": 295, - "463": 295, - "464": 296, - "465": 296, - "466": 296, - "467": 297, - "468": 298, - "469": 301, - "470": 301, - "471": 301, - "472": 305, - "473": 305, - "474": 306, - "475": 306, - "476": 310, - "477": 310, - "478": 311, - "479": 311, - "480": 315, - "481": 315, - "482": 316, - "483": 316, - "484": 320, - "485": 321, - "486": 322, - "487": 323, - "488": 324, - "489": 325, - "490": 326, - "491": 327, - "492": 328, - "493": 328, - "494": 329, - "495": 330, - "496": 331, - "497": 331, - "498": 332, - "499": 333, - "500": 334, - "501": 334, - "502": 335, - "503": 336, - "504": 337, - "505": 337, - "506": 338, - "507": 339, - "508": 340, - "509": 340, - "510": 341, - "511": 342, - "512": 343, - "513": 344, - "514": 345, - "515": 346, - "516": 346, - "517": 350, - "518": 350, - "519": 351, - "520": 352, - "521": 353, - "522": 354, - "523": 355, - "524": 356, - "525": 357, - "526": 357, - "527": 358, - "528": 358, - "529": 359, - "530": 360, - "531": 361, - "532": 362, - "533": 363, - "534": 364, - "535": 365, - "536": 365, - "537": 366, - "538": 366, - "539": 367, - "540": 368, - "541": 369, - "542": 370, - "543": 371, - "544": 372, - "545": 373, - "546": 374, - "547": 375, - "548": 376, - "549": 377, - "550": 378, - "551": 381, - "552": 381, - "553": 382, - "554": 383, - "555": 384, - "556": 384, - "557": 385, - "558": 386, - "559": 387, - "560": 388, - "561": 389, - "562": 390, - "563": 391, - "564": 391, - "565": 391, - "566": 392, - "567": 393, - "568": 396, - "569": 396, - "570": 396, - "571": 400, - "572": 400, - "573": 401, - "574": 402, - "575": 402, - "576": 403, - "577": 404, - "578": 405, - "579": 405, - "580": 406, - "581": 407, - "582": 408, - "583": 408, - "584": 412, - "585": 413, - "586": 413, - "587": 417, - "588": 417, - "589": 418, - "590": 418, - "591": 419, - "592": 420, - "593": 421, - "594": 422, - "595": 423, - "596": 424, - "597": 425, - "598": 426, - "599": 427, - "600": 428, - "601": 429, - "602": 432, - "603": 432, - "604": 433, - "605": 434, - "606": 435, - "607": 435, - "608": 436, - "609": 437, - "610": 438, - "611": 439, - "612": 440, - "613": 441, - "614": 441, - "615": 441, - "616": 442, - "617": 443, - "618": 446, - "619": 446, - "620": 446, - "621": 450, - "622": 450, - "623": 451, - "624": 452, - "625": 452, - "626": 453, - "627": 454, - "628": 455, - "629": 455, - "630": 456, - "631": 457, - "632": 458, - "633": 458, - "634": 462, - "635": 462, - "636": 463, - "637": 464, - "638": 465, - "639": 466, - "640": 466, - "641": 467, - "642": 468, - "643": 469, - "644": 469, - "645": 473, - "646": 473, - "647": 474, - "648": 475, - "649": 476, - "650": 477, - "651": 478, - "652": 479, - "653": 480, - "654": 481, - "655": 482, - "656": 483, - "657": 484, - "658": 485, - "659": 488, - "660": 488, - "661": 489, - "662": 490, - "663": 491, - "664": 491, - "665": 492, - "666": 493, - "667": 494, - "668": 495, - "669": 496, - "670": 497, - "671": 498, - "672": 498, - "673": 498, - "674": 499, - "675": 500, - "676": 503, - "677": 503, - "678": 503, - "679": 507, - "680": 507, - "681": 508, - "682": 509, - "683": 509, - "684": 510, - "685": 511, - "686": 512, - "687": 512, - "688": 513, - "689": 514, - "690": 515, - "691": 515, - "692": 519, - "693": 519, - "694": 520, - "695": 520, - "696": 521, - "697": 525, - "698": 525, - "699": 526, - "700": 526, - "701": 527, - "702": 527, - "703": 528, - "704": 532, - "705": 532, - "706": 533, - "707": 533, - "708": 534, - "709": 538, - "710": 538, - "711": 539, - "712": 540, - "713": 541, - "714": 542, - "715": 543, - "716": 544, - "717": 545, - "718": 546, - "719": 547, - "720": 547, - "721": 548, - "722": 548, - "723": 549, - "724": 550, - "725": 551, - "726": 552, - "727": 553, - "728": 554, - "729": 555, - "730": 556, - "731": 557, - "732": 558, - "733": 558, - "734": 559, - "735": 560, - "736": 561, - "737": 562, - "738": 563, - "739": 564, - "740": 565, - "741": 566, - "742": 567, - "743": 568, - "744": 569, - "745": 569, - "746": 573, - "747": 573, - "748": 574, - "749": 575, - "750": 576, - "751": 577, - "752": 578, - "753": 581, - "754": 581, - "755": 582, - "756": 583, - "757": 584, - "758": 584, - "759": 585, - "760": 586, - "761": 587, - "762": 588, - "763": 589, - "764": 590, - "765": 591, - "766": 591, - "767": 591, - "768": 592, - "769": 593, - "770": 596, - "771": 596, - "772": 596, - "773": 600, - "774": 600, - "775": 601, - "776": 602, - "777": 602, - "778": 603, - "779": 604, - "780": 605, - "781": 605, - "782": 606, - "783": 607, - "784": 608, - "785": 608, - "786": 612, - "787": 612, - "788": 613, - "789": 613, - "790": 614, - "791": 618, - "792": 618, - "793": 619, - "794": 619, - "795": 620, - "796": 620, - "797": 621, - "798": 625, - "799": 625, - "800": 626, - "801": 626, - "802": 627, - "803": 631, - "804": 631, - "805": 632, - "806": 633, - "807": 634, - "808": 635, - "809": 636, - "810": 636, - "811": 637, - "812": 638, - "813": 639, - "814": 639, - "815": 640, - "816": 641, - "817": 645, - "818": 645, - "819": 646, - "820": 646, - "821": 647, - "822": 648, - "823": 649, - "824": 650, - "825": 651, - "826": 651, - "827": 652, - "828": 653, - "829": 654, - "830": 654, - "831": 655, - "832": 655, - "833": 656, - "834": 656, - "835": 657, - "836": 661, - "837": 661, - "838": 662, - "839": 663, - "840": 664, - "841": 665, - "842": 666, - "843": 667, - "844": 667, - "845": 668, - "846": 669, - "847": 670, - "848": 670, - "849": 671, - "850": 672, - "851": 676, - "852": 676, - "853": 677, - "854": 678, - "855": 679, - "856": 680, - "857": 681, - "858": 682, - "859": 683, - "860": 684, - "861": 685, - "862": 685, - "863": 686, - "864": 686, - "865": 687, - "866": 688, - "867": 689, - "868": 690, - "869": 691, - "870": 692, - "871": 693, - "872": 694, - "873": 695, - "874": 696, - "875": 696, - "876": 697, - "877": 698, - "878": 699, - "879": 700, - "880": 701, - "881": 702, - "882": 703, - "883": 704, - "884": 705, - "885": 706, - "886": 707, - "887": 707, - "888": 711, - "889": 711, - "890": 712, - "891": 713, - "892": 714, - "893": 715, - "894": 716, - "895": 719, - "896": 719, - "897": 720, - "898": 721, - "899": 722, - "900": 722, - "901": 723, - "902": 724, - "903": 725, - "904": 726, - "905": 727, - "906": 728, - "907": 729, - "908": 729, - "909": 729, - "910": 730, - "911": 731, - "912": 734, - "913": 734, - "914": 734, - "915": 738, - "916": 738, - "917": 739, - "918": 740, - "919": 740, - "920": 741, - "921": 742, - "922": 743, - "923": 743, - "924": 744, - "925": 745, - "926": 746, - "927": 746, - "928": 750, - "929": 750, - "930": 751, - "931": 751, - "932": 752, - "933": 756, - "934": 756, - "935": 757, - "936": 757, - "937": 758, - "938": 758, - "939": 759, - "940": 763, - "941": 763, - "942": 764, - "943": 764, - "944": 765, - "945": 769, - "946": 769, - "947": 770, - "948": 771, - "949": 772, - "950": 773, - "951": 774, - "952": 775, - "953": 776, - "954": 777, - "955": 778, - "956": 778, - "957": 779, - "958": 779, - "959": 780, - "960": 781, - "961": 782, - "962": 783, - "963": 784, - "964": 785, - "965": 786, - "966": 787, - "967": 788, - "968": 789, - "969": 789, - "970": 790, - "971": 791, - "972": 792, - "973": 793, - "974": 794, - "975": 795, - "976": 796, - "977": 797, - "978": 798, - "979": 799, - "980": 800, - "981": 800, - "982": 804, - "983": 804, - "984": 805, - "985": 806, - "986": 807, - "987": 808, - "988": 809, - "989": 812, - "990": 812, - "991": 813, - "992": 814, - "993": 815, - "994": 815, - "995": 816, - "996": 817, - "997": 818, - "998": 819, - "999": 820, - "1000": 821, - "1001": 822, - "1002": 822, - "1003": 822, - "1004": 823, - "1005": 824, - "1006": 827, - "1007": 827, - "1008": 827, - "1009": 831, - "1010": 831, - "1011": 832, - "1012": 833, - "1013": 833, - "1014": 834, - "1015": 835, - "1016": 836, - "1017": 836, - "1018": 837, - "1019": 838, - "1020": 839, - "1021": 839, - "1022": 843, - "1023": 843, - "1024": 844, - "1025": 844, - "1026": 845, - "1027": 849, - "1028": 849, - "1029": 850, - "1030": 850, - "1031": 851, - "1032": 851, - "1033": 852, - "1034": 856, - "1035": 856, - "1036": 857, - "1037": 857, - "1038": 858, - "1039": 862, - "1040": 862, - "1041": 863, - "1042": 864, - "1043": 865, - "1044": 866, - "1045": 867, - "1046": 867, - "1047": 867, - "1048": 868, - "1049": 869, - "1050": 870, - "1051": 870, - "1052": 871, - "1053": 872, - "1054": 876, - "1055": 876, - "1056": 877, - "1057": 877, - "1058": 878, - "1059": 879, - "1060": 880, - "1061": 881, - "1062": 882, - "1063": 882, - "1064": 882, - "1065": 883, - "1066": 884, - "1067": 885, - "1068": 885, - "1069": 886, - "1070": 886, - "1071": 887, - "1072": 887, - "1073": 888, - "1074": 892, - "1075": 892, - "1076": 893, - "1077": 894, - "1078": 895, - "1079": 896, - "1080": 897, - "1081": 898, - "1082": 898, - "1083": 898, - "1084": 899, - "1085": 900, - "1086": 901, - "1087": 901, - "1088": 902, - "1089": 903, - "1090": 907, - "1091": 907, - "1092": 908, - "1093": 909, - "1094": 910, - "1095": 911, - "1096": 912, - "1097": 913, - "1098": 914, - "1099": 915, - "1100": 916, - "1101": 916, - "1102": 917, - "1103": 917, - "1104": 918, - "1105": 919, - "1106": 920, - "1107": 921, - "1108": 922, - "1109": 923, - "1110": 924, - "1111": 925, - "1112": 926, - "1113": 927, - "1114": 927, - "1115": 928, - "1116": 929, - "1117": 930, - "1118": 931, - "1119": 932, - "1120": 933, - "1121": 934, - "1122": 935, - "1123": 936, - "1124": 937, - "1125": 938, - "1126": 938, - "1127": 942, - "1128": 942, - "1129": 943, - "1130": 944, - "1131": 945, - "1132": 946, - "1133": 947, - "1134": 950, - "1135": 950, - "1136": 951, - "1137": 952, - "1138": 953, - "1139": 953, - "1140": 954, - "1141": 955, - "1142": 956, - "1143": 957, - "1144": 958, - "1145": 959, - "1146": 959, - "1147": 959, - "1148": 960, - "1149": 961, - "1150": 964, - "1151": 964, - "1152": 964, - "1153": 968, - "1154": 968, - "1155": 969, - "1156": 970, - "1157": 970, - "1158": 971, - "1159": 972, - "1160": 973, - "1161": 973, - "1162": 974, - "1163": 975, - "1164": 976, - "1165": 976, - "1166": 977, - "1167": 978, - "1168": 978, - "1169": 979, - "1170": 980, - "1171": 981, - "1172": 981, - "1173": 982, - "1174": 983, - "1175": 984, - "1176": 985, - "1177": 985, - "1178": 986, - "1179": 987, - "1180": 987, - "1181": 988, - "1182": 989, - "1183": 990, - "1184": 990, - "1185": 991, - "1186": 992, - "1187": 993, - "1188": 994, - "1189": 994, - "1190": 998, - "1191": 998, - "1192": 999, - "1193": 1000, - "1194": 1000, - "1195": 1001, - "1196": 1002, - "1197": 1003, - "1198": 1004, - "1199": 1005, - "1200": 1006, - "1201": 1007, - "1202": 1008, - "1203": 1009, - "1204": 1010, - "1205": 1011, - "1206": 1012, - "1207": 1013, - "1208": 1014, - "1209": 1017, - "1210": 1017, - "1211": 1018, - "1212": 1019, - "1213": 1020, - "1214": 1020, - "1215": 1021, - "1216": 1022, - "1217": 1023, - "1218": 1024, - "1219": 1025, - "1220": 1026, - "1221": 1026, - "1222": 1026, - "1223": 1027, - "1224": 1028, - "1225": 1031, - "1226": 1031, - "1227": 1031, - "1228": 1035, - "1229": 1035, - "1230": 1036, - "1231": 1037, - "1232": 1037, - "1233": 1038, - "1234": 1039, - "1235": 1040, - "1236": 1040, - "1237": 1041, - "1238": 1042, - "1239": 1043, - "1240": 1043, - "1241": 1044, - "1242": 1045, - "1243": 1045, - "1244": 1046, - "1245": 1047, - "1246": 1048, - "1247": 1048, - "1248": 1049, - "1249": 1050, - "1250": 1051, - "1251": 1052, - "1252": 1052, - "1253": 1053, - "1254": 1054, - "1255": 1054, - "1256": 1055, - "1257": 1056, - "1258": 1057, - "1259": 1057, - "1260": 1058, - "1261": 1059, - "1262": 1060, - "1263": 1061, - "1264": 1061, - "1265": 1065, - "1266": 1065, - "1267": 1066, - "1268": 1067, - "1269": 1067, - "1270": 1068, - "1271": 1069, - "1272": 1070, - "1273": 1071, - "1274": 1072, - "1275": 1073, - "1276": 1073, - "1277": 1074, - "1278": 1075, - "1279": 1076, - "1280": 1076, - "1281": 1080, - "1282": 1080, - "1283": 1081, - "1284": 1082, - "1285": 1082, - "1286": 1083, - "1287": 1084, - "1288": 1085, - "1289": 1086, - "1290": 1087, - "1291": 1088, - "1292": 1089, - "1293": 1090, - "1294": 1091, - "1295": 1092, - "1296": 1093, - "1297": 1094, - "1298": 1095, - "1299": 1096, - "1300": 1099, - "1301": 1099, - "1302": 1100, - "1303": 1101, - "1304": 1102, - "1305": 1102, - "1306": 1103, - "1307": 1104, - "1308": 1105, - "1309": 1106, - "1310": 1107, - "1311": 1108, - "1312": 1108, - "1313": 1108, - "1314": 1109, - "1315": 1110, - "1316": 1113, - "1317": 1113, - "1318": 1113, - "1319": 1117, - "1320": 1117, - "1321": 1118, - "1322": 1119, - "1323": 1119, - "1324": 1120, - "1325": 1121, - "1326": 1122, - "1327": 1122, - "1328": 1123, - "1329": 1124, - "1330": 1125, - "1331": 1125, - "1332": 1126, - "1333": 1127, - "1334": 1127, - "1335": 1128, - "1336": 1129, - "1337": 1130, - "1338": 1130, - "1339": 1131, - "1340": 1132, - "1341": 1133, - "1342": 1134, - "1343": 1134, - "1344": 1135, - "1345": 1136, - "1346": 1136, - "1347": 1137, - "1348": 1138, - "1349": 1139, - "1350": 1139, - "1351": 1140, - "1352": 1141, - "1353": 1142, - "1354": 1143, - "1355": 1143, - "1356": 1147, - "1357": 1147, - "1358": 1148, - "1359": 1149, - "1360": 1149, - "1361": 1150, - "1362": 1151, - "1363": 1151, - "1364": 1152, - "1365": 1153, - "1366": 1153, - "1367": 1154, - "1368": 1155, - "1369": 1156, - "1370": 1156, - "1371": 1157, - "1372": 1158, - "1373": 1159, - "1374": 1160, - "1375": 1160, - "1376": 1164, - "1377": 1164, - "1378": 1165, - "1379": 1166, - "1380": 1166, - "1381": 1167, - "1382": 1168, - "1383": 1169, - "1384": 1170, - "1385": 1171, - "1386": 1172, - "1387": 1173, - "1388": 1174, - "1389": 1175, - "1390": 1176, - "1391": 1177, - "1392": 1178, - "1393": 1179, - "1394": 1180, - "1395": 1183, - "1396": 1183, - "1397": 1184, - "1398": 1185, - "1399": 1186, - "1400": 1186, - "1401": 1187, - "1402": 1188, - "1403": 1189, - "1404": 1190, - "1405": 1191, - "1406": 1192, - "1407": 1192, - "1408": 1192, - "1409": 1193, - "1410": 1194, - "1411": 1197, - "1412": 1197, - "1413": 1197, - "1414": 1201, - "1415": 1201, - "1416": 1202, - "1417": 1203, - "1418": 1203, - "1419": 1203, - "1420": 1204, - "1421": 1204, - "1422": 1205, - "1423": 1206, - "1424": 1206, - "1425": 1206, - "1426": 1207, - "1427": 1208, - "1428": 1208, - "1429": 1209, - "1430": 1210, - "1431": 1210, - "1432": 1210, - "1433": 1211, - "1434": 1211, - "1435": 1212, - "1436": 1213, - "1437": 1213, - "1438": 1213, - "1439": 1214, - "1440": 1215, - "1441": 1216, - "1442": 1216, - "1443": 1217, - "1444": 1218, - "1445": 1218, - "1446": 1218, - "1447": 1219, - "1448": 1219, - "1449": 1220, - "1450": 1221, - "1451": 1221, + "235": 75, + "236": 76, + "237": 76, + "238": 77, + "239": 77, + "240": 78, + "241": 79, + "242": 79, + "243": 80, + "244": 80, + "245": 81, + "246": 82, + "247": 83, + "248": 83, + "249": 84, + "250": 85, + "251": 86, + "252": 87, + "253": 87, + "254": 87, + "255": 88, + "256": 88, + "257": 89, + "258": 89, + "259": 90, + "260": 91, + "261": 92, + "262": 92, + "263": 93, + "264": 93, + "265": 94, + "266": 94, + "267": 95, + "268": 95, + "269": 96, + "270": 99, + "271": 99, + "272": 99, + "273": 100, + "274": 100, + "275": 101, + "276": 101, + "277": 102, + "278": 103, + "279": 103, + "280": 104, + "281": 104, + "282": 105, + "283": 108, + "284": 108, + "285": 109, + "286": 110, + "287": 111, + "288": 111, + "289": 112, + "290": 113, + "291": 114, + "292": 115, + "293": 116, + "294": 116, + "295": 116, + "296": 117, + "297": 118, + "298": 121, + "299": 121, + "300": 121, + "301": 122, + "302": 125, + "303": 125, + "304": 126, + "305": 127, + "306": 128, + "307": 128, + "308": 129, + "309": 130, + "310": 131, + "311": 132, + "312": 133, + "313": 133, + "314": 133, + "315": 134, + "316": 135, + "317": 138, + "318": 138, + "319": 138, + "320": 139, + "321": 142, + "322": 142, + "323": 143, + "324": 144, + "325": 145, + "326": 145, + "327": 146, + "328": 147, + "329": 148, + "330": 149, + "331": 150, + "332": 151, + "333": 151, + "334": 151, + "335": 152, + "336": 153, + "337": 156, + "338": 156, + "339": 156, + "340": 160, + "341": 160, + "342": 161, + "343": 162, + "344": 162, + "345": 163, + "346": 164, + "347": 165, + "348": 165, + "349": 166, + "350": 167, + "351": 168, + "352": 168, + "353": 172, + "354": 172, + "355": 173, + "356": 174, + "357": 175, + "358": 176, + "359": 177, + "360": 178, + "361": 179, + "362": 180, + "363": 181, + "364": 182, + "365": 183, + "366": 184, + "367": 187, + "368": 187, + "369": 188, + "370": 189, + "371": 190, + "372": 190, + "373": 191, + "374": 192, + "375": 193, + "376": 194, + "377": 195, + "378": 196, + "379": 196, + "380": 196, + "381": 197, + "382": 198, + "383": 201, + "384": 201, + "385": 201, + "386": 205, + "387": 205, + "388": 206, + "389": 207, + "390": 207, + "391": 208, + "392": 209, + "393": 210, + "394": 210, + "395": 211, + "396": 212, + "397": 213, + "398": 213, + "399": 217, + "400": 217, + "401": 218, + "402": 219, + "403": 220, + "404": 221, + "405": 222, + "406": 225, + "407": 225, + "408": 226, + "409": 227, + "410": 228, + "411": 228, + "412": 229, + "413": 230, + "414": 231, + "415": 232, + "416": 233, + "417": 233, + "418": 233, + "419": 234, + "420": 234, + "421": 234, + "422": 235, + "423": 236, + "424": 239, + "425": 239, + "426": 239, + "427": 243, + "428": 243, + "429": 244, + "430": 245, + "431": 246, + "432": 247, + "433": 248, + "434": 249, + "435": 250, + "436": 251, + "437": 252, + "438": 253, + "439": 254, + "440": 255, + "441": 258, + "442": 258, + "443": 259, + "444": 260, + "445": 261, + "446": 261, + "447": 262, + "448": 263, + "449": 264, + "450": 265, + "451": 266, + "452": 267, + "453": 267, + "454": 268, + "455": 268, + "456": 268, + "457": 269, + "458": 270, + "459": 273, + "460": 273, + "461": 273, + "462": 277, + "463": 277, + "464": 278, + "465": 278, + "466": 282, + "467": 282, + "468": 283, + "469": 283, + "470": 287, + "471": 287, + "472": 288, + "473": 288, + "474": 292, + "475": 292, + "476": 293, + "477": 294, + "478": 294, + "479": 295, + "480": 296, + "481": 297, + "482": 297, + "483": 298, + "484": 299, + "485": 300, + "486": 300, + "487": 304, + "488": 304, + "489": 305, + "490": 306, + "491": 307, + "492": 308, + "493": 309, + "494": 310, + "495": 311, + "496": 312, + "497": 313, + "498": 314, + "499": 315, + "500": 316, + "501": 319, + "502": 319, + "503": 320, + "504": 321, + "505": 322, + "506": 322, + "507": 323, + "508": 324, + "509": 325, + "510": 326, + "511": 327, + "512": 328, + "513": 328, + "514": 329, + "515": 329, + "516": 329, + "517": 330, + "518": 331, + "519": 334, + "520": 334, + "521": 334, + "522": 338, + "523": 338, + "524": 339, + "525": 339, + "526": 343, + "527": 343, + "528": 344, + "529": 344, + "530": 348, + "531": 348, + "532": 349, + "533": 349, + "534": 353, + "535": 354, + "536": 355, + "537": 356, + "538": 357, + "539": 358, + "540": 359, + "541": 360, + "542": 361, + "543": 361, + "544": 362, + "545": 363, + "546": 364, + "547": 364, + "548": 365, + "549": 366, + "550": 367, + "551": 367, + "552": 368, + "553": 369, + "554": 370, + "555": 370, + "556": 371, + "557": 372, + "558": 373, + "559": 373, + "560": 374, + "561": 375, + "562": 376, + "563": 377, + "564": 378, + "565": 379, + "566": 379, + "567": 383, + "568": 383, + "569": 384, + "570": 385, + "571": 386, + "572": 387, + "573": 388, + "574": 389, + "575": 390, + "576": 390, + "577": 391, + "578": 391, + "579": 392, + "580": 393, + "581": 394, + "582": 395, + "583": 396, + "584": 397, + "585": 398, + "586": 398, + "587": 399, + "588": 399, + "589": 400, + "590": 401, + "591": 402, + "592": 403, + "593": 404, + "594": 405, + "595": 406, + "596": 407, + "597": 408, + "598": 409, + "599": 410, + "600": 411, + "601": 414, + "602": 414, + "603": 415, + "604": 416, + "605": 417, + "606": 417, + "607": 418, + "608": 419, + "609": 420, + "610": 421, + "611": 422, + "612": 423, + "613": 424, + "614": 424, + "615": 424, + "616": 425, + "617": 426, + "618": 429, + "619": 429, + "620": 429, + "621": 433, + "622": 433, + "623": 434, + "624": 435, + "625": 435, + "626": 436, + "627": 437, + "628": 438, + "629": 438, + "630": 439, + "631": 440, + "632": 441, + "633": 441, + "634": 445, + "635": 446, + "636": 446, + "637": 450, + "638": 450, + "639": 451, + "640": 451, + "641": 452, + "642": 453, + "643": 454, + "644": 455, + "645": 456, + "646": 457, + "647": 458, + "648": 459, + "649": 460, + "650": 461, + "651": 462, + "652": 465, + "653": 465, + "654": 466, + "655": 467, + "656": 468, + "657": 468, + "658": 469, + "659": 470, + "660": 471, + "661": 472, + "662": 473, + "663": 474, + "664": 474, + "665": 474, + "666": 475, + "667": 476, + "668": 479, + "669": 479, + "670": 479, + "671": 483, + "672": 483, + "673": 484, + "674": 485, + "675": 485, + "676": 486, + "677": 487, + "678": 488, + "679": 488, + "680": 489, + "681": 490, + "682": 491, + "683": 491, + "684": 495, + "685": 495, + "686": 496, + "687": 497, + "688": 498, + "689": 499, + "690": 499, + "691": 500, + "692": 501, + "693": 502, + "694": 502, + "695": 506, + "696": 506, + "697": 507, + "698": 508, + "699": 509, + "700": 510, + "701": 511, + "702": 512, + "703": 513, + "704": 514, + "705": 515, + "706": 516, + "707": 517, + "708": 518, + "709": 521, + "710": 521, + "711": 522, + "712": 523, + "713": 524, + "714": 524, + "715": 525, + "716": 526, + "717": 527, + "718": 528, + "719": 529, + "720": 530, + "721": 531, + "722": 531, + "723": 531, + "724": 532, + "725": 533, + "726": 536, + "727": 536, + "728": 536, + "729": 540, + "730": 540, + "731": 541, + "732": 542, + "733": 542, + "734": 543, + "735": 544, + "736": 545, + "737": 545, + "738": 546, + "739": 547, + "740": 548, + "741": 548, + "742": 552, + "743": 552, + "744": 553, + "745": 553, + "746": 554, + "747": 558, + "748": 558, + "749": 559, + "750": 559, + "751": 560, + "752": 560, + "753": 561, + "754": 565, + "755": 565, + "756": 566, + "757": 566, + "758": 567, + "759": 571, + "760": 571, + "761": 572, + "762": 573, + "763": 574, + "764": 575, + "765": 576, + "766": 577, + "767": 578, + "768": 579, + "769": 580, + "770": 580, + "771": 581, + "772": 581, + "773": 582, + "774": 583, + "775": 584, + "776": 585, + "777": 586, + "778": 587, + "779": 588, + "780": 589, + "781": 590, + "782": 591, + "783": 591, + "784": 592, + "785": 593, + "786": 594, + "787": 595, + "788": 596, + "789": 597, + "790": 598, + "791": 599, + "792": 600, + "793": 601, + "794": 602, + "795": 602, + "796": 606, + "797": 606, + "798": 607, + "799": 608, + "800": 609, + "801": 610, + "802": 611, + "803": 614, + "804": 614, + "805": 615, + "806": 616, + "807": 617, + "808": 617, + "809": 618, + "810": 619, + "811": 620, + "812": 621, + "813": 622, + "814": 623, + "815": 624, + "816": 624, + "817": 624, + "818": 625, + "819": 626, + "820": 629, + "821": 629, + "822": 629, + "823": 633, + "824": 633, + "825": 634, + "826": 635, + "827": 635, + "828": 636, + "829": 637, + "830": 638, + "831": 638, + "832": 639, + "833": 640, + "834": 641, + "835": 641, + "836": 645, + "837": 645, + "838": 646, + "839": 646, + "840": 647, + "841": 651, + "842": 651, + "843": 652, + "844": 652, + "845": 653, + "846": 653, + "847": 654, + "848": 658, + "849": 658, + "850": 659, + "851": 659, + "852": 660, + "853": 664, + "854": 664, + "855": 665, + "856": 666, + "857": 667, + "858": 668, + "859": 669, + "860": 669, + "861": 670, + "862": 671, + "863": 672, + "864": 672, + "865": 673, + "866": 674, + "867": 678, + "868": 678, + "869": 679, + "870": 679, + "871": 680, + "872": 681, + "873": 682, + "874": 683, + "875": 684, + "876": 684, + "877": 685, + "878": 686, + "879": 687, + "880": 687, + "881": 688, + "882": 688, + "883": 689, + "884": 689, + "885": 690, + "886": 694, + "887": 694, + "888": 695, + "889": 696, + "890": 697, + "891": 698, + "892": 699, + "893": 700, + "894": 700, + "895": 701, + "896": 702, + "897": 703, + "898": 703, + "899": 704, + "900": 705, + "901": 709, + "902": 709, + "903": 710, + "904": 711, + "905": 712, + "906": 713, + "907": 714, + "908": 715, + "909": 716, + "910": 717, + "911": 718, + "912": 718, + "913": 719, + "914": 719, + "915": 720, + "916": 721, + "917": 722, + "918": 723, + "919": 724, + "920": 725, + "921": 726, + "922": 727, + "923": 728, + "924": 729, + "925": 729, + "926": 730, + "927": 731, + "928": 732, + "929": 733, + "930": 734, + "931": 735, + "932": 736, + "933": 737, + "934": 738, + "935": 739, + "936": 740, + "937": 740, + "938": 744, + "939": 744, + "940": 745, + "941": 746, + "942": 747, + "943": 748, + "944": 749, + "945": 752, + "946": 752, + "947": 753, + "948": 754, + "949": 755, + "950": 755, + "951": 756, + "952": 757, + "953": 758, + "954": 759, + "955": 760, + "956": 761, + "957": 762, + "958": 762, + "959": 762, + "960": 763, + "961": 764, + "962": 767, + "963": 767, + "964": 767, + "965": 771, + "966": 771, + "967": 772, + "968": 773, + "969": 773, + "970": 774, + "971": 775, + "972": 776, + "973": 776, + "974": 777, + "975": 778, + "976": 779, + "977": 779, + "978": 783, + "979": 783, + "980": 784, + "981": 784, + "982": 785, + "983": 789, + "984": 789, + "985": 790, + "986": 790, + "987": 791, + "988": 791, + "989": 792, + "990": 796, + "991": 796, + "992": 797, + "993": 797, + "994": 798, + "995": 802, + "996": 802, + "997": 803, + "998": 804, + "999": 805, + "1000": 806, + "1001": 807, + "1002": 808, + "1003": 809, + "1004": 810, + "1005": 811, + "1006": 811, + "1007": 812, + "1008": 812, + "1009": 813, + "1010": 814, + "1011": 815, + "1012": 816, + "1013": 817, + "1014": 818, + "1015": 819, + "1016": 820, + "1017": 821, + "1018": 822, + "1019": 822, + "1020": 823, + "1021": 824, + "1022": 825, + "1023": 826, + "1024": 827, + "1025": 828, + "1026": 829, + "1027": 830, + "1028": 831, + "1029": 832, + "1030": 833, + "1031": 833, + "1032": 837, + "1033": 837, + "1034": 838, + "1035": 839, + "1036": 840, + "1037": 841, + "1038": 842, + "1039": 845, + "1040": 845, + "1041": 846, + "1042": 847, + "1043": 848, + "1044": 848, + "1045": 849, + "1046": 850, + "1047": 851, + "1048": 852, + "1049": 853, + "1050": 854, + "1051": 855, + "1052": 855, + "1053": 855, + "1054": 856, + "1055": 857, + "1056": 860, + "1057": 860, + "1058": 860, + "1059": 864, + "1060": 864, + "1061": 865, + "1062": 866, + "1063": 866, + "1064": 867, + "1065": 868, + "1066": 869, + "1067": 869, + "1068": 870, + "1069": 871, + "1070": 872, + "1071": 872, + "1072": 876, + "1073": 876, + "1074": 877, + "1075": 877, + "1076": 878, + "1077": 882, + "1078": 882, + "1079": 883, + "1080": 883, + "1081": 884, + "1082": 884, + "1083": 885, + "1084": 889, + "1085": 889, + "1086": 890, + "1087": 890, + "1088": 891, + "1089": 895, + "1090": 895, + "1091": 896, + "1092": 897, + "1093": 898, + "1094": 899, + "1095": 900, + "1096": 900, + "1097": 900, + "1098": 901, + "1099": 902, + "1100": 903, + "1101": 903, + "1102": 904, + "1103": 905, + "1104": 909, + "1105": 909, + "1106": 910, + "1107": 910, + "1108": 911, + "1109": 912, + "1110": 913, + "1111": 914, + "1112": 915, + "1113": 915, + "1114": 915, + "1115": 916, + "1116": 917, + "1117": 918, + "1118": 918, + "1119": 919, + "1120": 919, + "1121": 920, + "1122": 920, + "1123": 921, + "1124": 925, + "1125": 925, + "1126": 926, + "1127": 927, + "1128": 928, + "1129": 929, + "1130": 930, + "1131": 931, + "1132": 931, + "1133": 931, + "1134": 932, + "1135": 933, + "1136": 934, + "1137": 934, + "1138": 935, + "1139": 936, + "1140": 940, + "1141": 940, + "1142": 941, + "1143": 942, + "1144": 943, + "1145": 944, + "1146": 945, + "1147": 946, + "1148": 947, + "1149": 948, + "1150": 949, + "1151": 949, + "1152": 950, + "1153": 950, + "1154": 951, + "1155": 952, + "1156": 953, + "1157": 954, + "1158": 955, + "1159": 956, + "1160": 957, + "1161": 958, + "1162": 959, + "1163": 960, + "1164": 960, + "1165": 961, + "1166": 962, + "1167": 963, + "1168": 964, + "1169": 965, + "1170": 966, + "1171": 967, + "1172": 968, + "1173": 969, + "1174": 970, + "1175": 971, + "1176": 971, + "1177": 975, + "1178": 975, + "1179": 976, + "1180": 977, + "1181": 978, + "1182": 979, + "1183": 980, + "1184": 983, + "1185": 983, + "1186": 984, + "1187": 985, + "1188": 986, + "1189": 986, + "1190": 987, + "1191": 988, + "1192": 989, + "1193": 990, + "1194": 991, + "1195": 992, + "1196": 992, + "1197": 992, + "1198": 993, + "1199": 994, + "1200": 997, + "1201": 997, + "1202": 997, + "1203": 1001, + "1204": 1001, + "1205": 1002, + "1206": 1003, + "1207": 1003, + "1208": 1004, + "1209": 1005, + "1210": 1006, + "1211": 1006, + "1212": 1007, + "1213": 1008, + "1214": 1009, + "1215": 1009, + "1216": 1010, + "1217": 1011, + "1218": 1011, + "1219": 1012, + "1220": 1013, + "1221": 1014, + "1222": 1014, + "1223": 1015, + "1224": 1016, + "1225": 1017, + "1226": 1018, + "1227": 1018, + "1228": 1019, + "1229": 1020, + "1230": 1020, + "1231": 1021, + "1232": 1022, + "1233": 1023, + "1234": 1023, + "1235": 1024, + "1236": 1025, + "1237": 1026, + "1238": 1027, + "1239": 1027, + "1240": 1031, + "1241": 1031, + "1242": 1032, + "1243": 1033, + "1244": 1033, + "1245": 1034, + "1246": 1035, + "1247": 1036, + "1248": 1037, + "1249": 1038, + "1250": 1039, + "1251": 1040, + "1252": 1041, + "1253": 1042, + "1254": 1043, + "1255": 1044, + "1256": 1045, + "1257": 1046, + "1258": 1047, + "1259": 1050, + "1260": 1050, + "1261": 1051, + "1262": 1052, + "1263": 1053, + "1264": 1053, + "1265": 1054, + "1266": 1055, + "1267": 1056, + "1268": 1057, + "1269": 1058, + "1270": 1059, + "1271": 1059, + "1272": 1059, + "1273": 1060, + "1274": 1061, + "1275": 1064, + "1276": 1064, + "1277": 1064, + "1278": 1068, + "1279": 1068, + "1280": 1069, + "1281": 1070, + "1282": 1070, + "1283": 1071, + "1284": 1072, + "1285": 1073, + "1286": 1073, + "1287": 1074, + "1288": 1075, + "1289": 1076, + "1290": 1076, + "1291": 1077, + "1292": 1078, + "1293": 1078, + "1294": 1079, + "1295": 1080, + "1296": 1081, + "1297": 1081, + "1298": 1082, + "1299": 1083, + "1300": 1084, + "1301": 1085, + "1302": 1085, + "1303": 1086, + "1304": 1087, + "1305": 1087, + "1306": 1088, + "1307": 1089, + "1308": 1090, + "1309": 1090, + "1310": 1091, + "1311": 1092, + "1312": 1093, + "1313": 1094, + "1314": 1094, + "1315": 1098, + "1316": 1098, + "1317": 1099, + "1318": 1100, + "1319": 1100, + "1320": 1101, + "1321": 1102, + "1322": 1103, + "1323": 1104, + "1324": 1105, + "1325": 1106, + "1326": 1106, + "1327": 1107, + "1328": 1108, + "1329": 1109, + "1330": 1109, + "1331": 1113, + "1332": 1113, + "1333": 1114, + "1334": 1115, + "1335": 1115, + "1336": 1116, + "1337": 1117, + "1338": 1118, + "1339": 1119, + "1340": 1120, + "1341": 1121, + "1342": 1122, + "1343": 1123, + "1344": 1124, + "1345": 1125, + "1346": 1126, + "1347": 1127, + "1348": 1128, + "1349": 1129, + "1350": 1132, + "1351": 1132, + "1352": 1133, + "1353": 1134, + "1354": 1135, + "1355": 1135, + "1356": 1136, + "1357": 1137, + "1358": 1138, + "1359": 1139, + "1360": 1140, + "1361": 1141, + "1362": 1141, + "1363": 1141, + "1364": 1142, + "1365": 1143, + "1366": 1146, + "1367": 1146, + "1368": 1146, + "1369": 1150, + "1370": 1150, + "1371": 1151, + "1372": 1152, + "1373": 1152, + "1374": 1153, + "1375": 1154, + "1376": 1155, + "1377": 1155, + "1378": 1156, + "1379": 1157, + "1380": 1158, + "1381": 1158, + "1382": 1159, + "1383": 1160, + "1384": 1160, + "1385": 1161, + "1386": 1162, + "1387": 1163, + "1388": 1163, + "1389": 1164, + "1390": 1165, + "1391": 1166, + "1392": 1167, + "1393": 1167, + "1394": 1168, + "1395": 1169, + "1396": 1169, + "1397": 1170, + "1398": 1171, + "1399": 1172, + "1400": 1172, + "1401": 1173, + "1402": 1174, + "1403": 1175, + "1404": 1176, + "1405": 1176, + "1406": 1180, + "1407": 1180, + "1408": 1181, + "1409": 1182, + "1410": 1182, + "1411": 1183, + "1412": 1184, + "1413": 1184, + "1414": 1185, + "1415": 1186, + "1416": 1186, + "1417": 1187, + "1418": 1188, + "1419": 1189, + "1420": 1189, + "1421": 1190, + "1422": 1191, + "1423": 1192, + "1424": 1193, + "1425": 1193, + "1426": 1197, + "1427": 1197, + "1428": 1198, + "1429": 1199, + "1430": 1199, + "1431": 1200, + "1432": 1201, + "1433": 1202, + "1434": 1203, + "1435": 1204, + "1436": 1205, + "1437": 1206, + "1438": 1207, + "1439": 1208, + "1440": 1209, + "1441": 1210, + "1442": 1211, + "1443": 1212, + "1444": 1213, + "1445": 1216, + "1446": 1216, + "1447": 1217, + "1448": 1218, + "1449": 1219, + "1450": 1219, + "1451": 1220, "1452": 1221, "1453": 1222, "1454": 1223, - "1455": 1223, - "1456": 1224, + "1455": 1224, + "1456": 1225, "1457": 1225, "1458": 1225, - "1459": 1225, - "1460": 1226, - "1461": 1226, - "1462": 1227, - "1463": 1228, - "1464": 1228, - "1465": 1228, - "1466": 1229, - "1467": 1230, - "1468": 1231, - "1469": 1232, - "1470": 1232, - "1471": 1236, - "1472": 1236, - "1473": 1237, - "1474": 1238, + "1459": 1226, + "1460": 1227, + "1461": 1230, + "1462": 1230, + "1463": 1230, + "1464": 1234, + "1465": 1234, + "1466": 1235, + "1467": 1236, + "1468": 1236, + "1469": 1236, + "1470": 1237, + "1471": 1237, + "1472": 1238, + "1473": 1239, + "1474": 1239, "1475": 1239, "1476": 1240, "1477": 1241, "1478": 1241, "1479": 1242, "1480": 1243, - "1481": 1244, - "1482": 1244, - "1483": 1245, - "1484": 1246, - "1485": 1246, + "1481": 1243, + "1482": 1243, + "1483": 1244, + "1484": 1244, + "1485": 1245, "1486": 1246, - "1487": 1247, - "1488": 1247, - "1489": 1248, - "1490": 1249, + "1487": 1246, + "1488": 1246, + "1489": 1247, + "1490": 1248, "1491": 1249, "1492": 1249, "1493": 1250, "1494": 1251, - "1495": 1252, - "1496": 1252, - "1497": 1256, - "1498": 1256, - "1499": 1257, - "1500": 1258, - "1501": 1259, - "1502": 1260, - "1503": 1261, - "1504": 1261, - "1505": 1262, - "1506": 1263, - "1507": 1264, - "1508": 1265, - "1509": 1266, - "1510": 1267, - "1511": 1268, - "1512": 1269, - "1513": 1270, - "1514": 1270, - "1515": 1271, - "1516": 1272, - "1517": 1273, - "1518": 1274, - "1519": 1275, - "1520": 1276, - "1521": 1279, - "1522": 1279, - "1523": 1280, - "1524": 1281, - "1525": 1282, - "1526": 1282, - "1527": 1283, - "1528": 1284, - "1529": 1285, - "1530": 1286, - "1531": 1287, - "1532": 1288, - "1533": 1288, - "1534": 1288, - "1535": 1289, - "1536": 1290, - "1537": 1293, - "1538": 1293, - "1539": 1293, - "1540": 1297, - "1541": 1298, - "1542": 1299, - "1543": 1299, - "1544": 1300, - "1545": 1300, - "1546": 1301, - "1547": 1301, - "1548": 1301, - "1549": 1301, - "1550": 1302, - "1551": 1302, - "1552": 1303, - "1553": 1303, - "1554": 1304, - "1555": 1304, - "1556": 1305, - "1557": 1306, - "1558": 1307, - "1559": 1307, - "1560": 1308, - "1561": 1308, - "1562": 1309, - "1563": 1309, - "1564": 1310, - "1565": 1311, - "1566": 1311, - "1567": 1311, - "1568": 1312, - "1569": 1313, - "1570": 1313, - "1571": 1314, - "1572": 1314, - "1573": 1315, - "1574": 1315, - "1575": 1316, - "1576": 1317, - "1577": 1318, - "1578": 1318, - "1579": 1319, + "1495": 1251, + "1496": 1251, + "1497": 1252, + "1498": 1252, + "1499": 1253, + "1500": 1254, + "1501": 1254, + "1502": 1254, + "1503": 1255, + "1504": 1256, + "1505": 1256, + "1506": 1257, + "1507": 1258, + "1508": 1258, + "1509": 1258, + "1510": 1259, + "1511": 1259, + "1512": 1260, + "1513": 1261, + "1514": 1261, + "1515": 1261, + "1516": 1262, + "1517": 1263, + "1518": 1264, + "1519": 1265, + "1520": 1265, + "1521": 1269, + "1522": 1269, + "1523": 1270, + "1524": 1271, + "1525": 1272, + "1526": 1273, + "1527": 1274, + "1528": 1274, + "1529": 1275, + "1530": 1276, + "1531": 1277, + "1532": 1277, + "1533": 1278, + "1534": 1279, + "1535": 1279, + "1536": 1279, + "1537": 1280, + "1538": 1280, + "1539": 1281, + "1540": 1282, + "1541": 1282, + "1542": 1282, + "1543": 1283, + "1544": 1284, + "1545": 1285, + "1546": 1285, + "1547": 1289, + "1548": 1289, + "1549": 1290, + "1550": 1291, + "1551": 1292, + "1552": 1293, + "1553": 1294, + "1554": 1294, + "1555": 1295, + "1556": 1296, + "1557": 1297, + "1558": 1298, + "1559": 1299, + "1560": 1300, + "1561": 1301, + "1562": 1302, + "1563": 1303, + "1564": 1303, + "1565": 1304, + "1566": 1305, + "1567": 1306, + "1568": 1307, + "1569": 1308, + "1570": 1309, + "1571": 1312, + "1572": 1312, + "1573": 1313, + "1574": 1314, + "1575": 1315, + "1576": 1315, + "1577": 1316, + "1578": 1317, + "1579": 1318, "1580": 1319, "1581": 1320, - "1582": 1320, + "1582": 1321, "1583": 1321, - "1584": 1322, + "1584": 1321, "1585": 1322, - "1586": 1322, - "1587": 1323, - "1588": 1324, - "1589": 1324, - "1590": 1325, - "1591": 1325, - "1592": 1326, - "1593": 1326, - "1594": 1327, - "1595": 1328, - "1596": 1328, - "1597": 1332, - "1598": 1332, - "1599": 1333, - "1600": 1334, - "1601": 1334, - "1602": 1335, - "1603": 1335, - "1604": 1336, - "1605": 1337, + "1586": 1323, + "1587": 1326, + "1588": 1326, + "1589": 1326, + "1590": 1330, + "1591": 1331, + "1592": 1332, + "1593": 1332, + "1594": 1332, + "1595": 1332, + "1596": 1333, + "1597": 1333, + "1598": 1334, + "1599": 1335, + "1600": 1335, + "1601": 1335, + "1602": 1336, + "1603": 1336, + "1604": 1337, + "1605": 1338, "1606": 1338, "1607": 1338, "1608": 1339, - "1609": 1340, - "1610": 1341, - "1611": 1342, - "1612": 1343, - "1613": 1344, - "1614": 1347, - "1615": 1347, - "1616": 1348, - "1617": 1349, - "1618": 1350, - "1619": 1350, - "1620": 1351, - "1621": 1352, - "1622": 1353, - "1623": 1354, - "1624": 1355, - "1625": 1356, - "1626": 1356, - "1627": 1356, - "1628": 1357, - "1629": 1358, - "1630": 1361, - "1631": 1361, - "1632": 1361, - "1633": 1365, - "1634": 1366, - "1635": 1367, - "1636": 1367, - "1637": 1368, - "1638": 1368, - "1639": 1369, - "1640": 1369, - "1641": 1369, - "1642": 1369, - "1643": 1370, - "1644": 1370, - "1645": 1371, - "1646": 1371, - "1647": 1372, - "1648": 1372, - "1649": 1373, - "1650": 1374, - "1651": 1375, - "1652": 1375, - "1653": 1376, - "1654": 1376, - "1655": 1377, - "1656": 1377, - "1657": 1378, - "1658": 1379, - "1659": 1379, - "1660": 1379, - "1661": 1380, - "1662": 1381, - "1663": 1381, + "1609": 1339, + "1610": 1339, + "1611": 1340, + "1612": 1340, + "1613": 1341, + "1614": 1342, + "1615": 1342, + "1616": 1342, + "1617": 1343, + "1618": 1343, + "1619": 1344, + "1620": 1345, + "1621": 1345, + "1622": 1345, + "1623": 1346, + "1624": 1346, + "1625": 1346, + "1626": 1347, + "1627": 1348, + "1628": 1349, + "1629": 1349, + "1630": 1353, + "1631": 1353, + "1632": 1354, + "1633": 1355, + "1634": 1355, + "1635": 1356, + "1636": 1356, + "1637": 1357, + "1638": 1358, + "1639": 1359, + "1640": 1359, + "1641": 1360, + "1642": 1361, + "1643": 1362, + "1644": 1363, + "1645": 1364, + "1646": 1365, + "1647": 1368, + "1648": 1368, + "1649": 1369, + "1650": 1370, + "1651": 1371, + "1652": 1371, + "1653": 1372, + "1654": 1373, + "1655": 1374, + "1656": 1375, + "1657": 1376, + "1658": 1377, + "1659": 1377, + "1660": 1377, + "1661": 1378, + "1662": 1379, + "1663": 1382, "1664": 1382, "1665": 1382, - "1666": 1383, - "1667": 1383, - "1668": 1384, - "1669": 1385, - "1670": 1385, - "1671": 1386, - "1672": 1387, - "1673": 1388, - "1674": 1389, - "1675": 1389, - "1676": 1390, - "1677": 1390, - "1678": 1391, - "1679": 1391, - "1680": 1392, - "1681": 1393, - "1682": 1393, - "1683": 1393, - "1684": 1394, + "1666": 1386, + "1667": 1387, + "1668": 1388, + "1669": 1388, + "1670": 1388, + "1671": 1388, + "1672": 1389, + "1673": 1389, + "1674": 1390, + "1675": 1391, + "1676": 1391, + "1677": 1391, + "1678": 1392, + "1679": 1392, + "1680": 1393, + "1681": 1394, + "1682": 1394, + "1683": 1394, + "1684": 1395, "1685": 1395, "1686": 1395, "1687": 1396, "1688": 1396, "1689": 1397, - "1690": 1397, + "1690": 1398, "1691": 1398, "1692": 1399, - "1693": 1399, - "1694": 1403, - "1695": 1403, - "1696": 1404, - "1697": 1405, - "1698": 1405, - "1699": 1406, - "1700": 1406, - "1701": 1407, - "1702": 1408, - "1703": 1409, - "1704": 1410, - "1705": 1411, - "1706": 1412, - "1707": 1413, - "1708": 1414, - "1709": 1415, - "1710": 1416, - "1711": 1417, - "1712": 1418, - "1713": 1419, - "1714": 1422, - "1715": 1422, - "1716": 1423, - "1717": 1424, - "1718": 1425, - "1719": 1425, - "1720": 1426, - "1721": 1427, - "1722": 1428, - "1723": 1429, - "1724": 1430, - "1725": 1431, - "1726": 1431, - "1727": 1431, - "1728": 1432, - "1729": 1433, - "1730": 1436, - "1731": 1436, - "1732": 1436, - "1733": 1440, - "1734": 1441, - "1735": 1442, - "1736": 1442, - "1737": 1443, - "1738": 1443, - "1739": 1444, - "1740": 1444, - "1741": 1445, - "1742": 1445, - "1743": 1446, - "1744": 1446, - "1745": 1447, - "1746": 1447, - "1747": 1448, - "1748": 1449, - "1749": 1450, + "1693": 1400, + "1694": 1401, + "1695": 1401, + "1696": 1401, + "1697": 1402, + "1698": 1402, + "1699": 1403, + "1700": 1404, + "1701": 1404, + "1702": 1404, + "1703": 1405, + "1704": 1405, + "1705": 1405, + "1706": 1406, + "1707": 1407, + "1708": 1408, + "1709": 1408, + "1710": 1412, + "1711": 1412, + "1712": 1413, + "1713": 1414, + "1714": 1414, + "1715": 1415, + "1716": 1415, + "1717": 1416, + "1718": 1417, + "1719": 1418, + "1720": 1419, + "1721": 1420, + "1722": 1421, + "1723": 1422, + "1724": 1423, + "1725": 1424, + "1726": 1425, + "1727": 1426, + "1728": 1427, + "1729": 1428, + "1730": 1431, + "1731": 1431, + "1732": 1432, + "1733": 1433, + "1734": 1434, + "1735": 1434, + "1736": 1435, + "1737": 1436, + "1738": 1437, + "1739": 1438, + "1740": 1439, + "1741": 1440, + "1742": 1440, + "1743": 1440, + "1744": 1441, + "1745": 1442, + "1746": 1445, + "1747": 1445, + "1748": 1445, + "1749": 1449, "1750": 1450, "1751": 1451, "1752": 1451, @@ -1759,6066 +1759,4875 @@ "1757": 1454, "1758": 1454, "1759": 1455, - "1760": 1456, + "1760": 1455, "1761": 1456, "1762": 1457, "1763": 1457, - "1764": 1458, + "1764": 1457, "1765": 1458, - "1766": 1459, - "1767": 1460, - "1768": 1461, - "1769": 1462, - "1770": 1462, - "1771": 1463, + "1766": 1458, + "1767": 1458, + "1768": 1459, + "1769": 1460, + "1770": 1461, + "1771": 1462, "1772": 1463, - "1773": 1464, + "1773": 1463, "1774": 1464, - "1775": 1465, + "1775": 1464, "1776": 1465, "1777": 1466, "1778": 1466, - "1779": 1467, + "1779": 1466, "1780": 1467, - "1781": 1468, - "1782": 1469, - "1783": 1470, - "1784": 1470, - "1785": 1471, - "1786": 1471, - "1787": 1472, - "1788": 1472, - "1789": 1473, - "1790": 1474, - "1791": 1474, + "1781": 1467, + "1782": 1468, + "1783": 1469, + "1784": 1469, + "1785": 1469, + "1786": 1470, + "1787": 1470, + "1788": 1470, + "1789": 1471, + "1790": 1472, + "1791": 1473, "1792": 1474, - "1793": 1475, - "1794": 1476, - "1795": 1476, - "1796": 1477, - "1797": 1477, - "1798": 1478, - "1799": 1478, - "1800": 1479, - "1801": 1480, - "1802": 1481, - "1803": 1481, + "1793": 1474, + "1794": 1478, + "1795": 1478, + "1796": 1479, + "1797": 1480, + "1798": 1480, + "1799": 1481, + "1800": 1482, + "1801": 1482, + "1802": 1483, + "1803": 1484, "1804": 1485, - "1805": 1485, - "1806": 1486, - "1807": 1487, - "1808": 1487, - "1809": 1488, - "1810": 1489, - "1811": 1489, - "1812": 1490, - "1813": 1491, - "1814": 1492, - "1815": 1493, - "1816": 1494, - "1817": 1495, - "1818": 1495, - "1819": 1496, - "1820": 1497, - "1821": 1498, - "1822": 1499, - "1823": 1500, - "1824": 1501, - "1825": 1504, - "1826": 1504, - "1827": 1505, + "1805": 1486, + "1806": 1487, + "1807": 1488, + "1808": 1488, + "1809": 1489, + "1810": 1490, + "1811": 1491, + "1812": 1492, + "1813": 1493, + "1814": 1494, + "1815": 1497, + "1816": 1497, + "1817": 1498, + "1818": 1499, + "1819": 1500, + "1820": 1500, + "1821": 1501, + "1822": 1502, + "1823": 1503, + "1824": 1504, + "1825": 1505, + "1826": 1506, + "1827": 1506, "1828": 1506, "1829": 1507, - "1830": 1507, - "1831": 1508, - "1832": 1509, - "1833": 1510, - "1834": 1511, - "1835": 1512, - "1836": 1513, - "1837": 1513, - "1838": 1513, - "1839": 1514, - "1840": 1515, - "1841": 1518, - "1842": 1518, - "1843": 1518, - "1844": 1522, - "1845": 1523, - "1846": 1524, - "1847": 1524, - "1848": 1525, - "1849": 1525, - "1850": 1526, - "1851": 1526, - "1852": 1527, - "1853": 1527, - "1854": 1528, - "1855": 1528, - "1856": 1529, - "1857": 1529, - "1858": 1530, - "1859": 1531, - "1860": 1531, - "1861": 1531, - "1862": 1532, - "1863": 1533, - "1864": 1533, - "1865": 1534, - "1866": 1534, - "1867": 1535, - "1868": 1535, - "1869": 1536, - "1870": 1537, - "1871": 1537, - "1872": 1537, - "1873": 1538, - "1874": 1539, - "1875": 1539, - "1876": 1540, - "1877": 1540, - "1878": 1541, - "1879": 1542, - "1880": 1543, - "1881": 1543, - "1882": 1544, - "1883": 1544, - "1884": 1545, - "1885": 1545, - "1886": 1546, - "1887": 1546, - "1888": 1547, - "1889": 1547, - "1890": 1548, - "1891": 1548, - "1892": 1549, - "1893": 1550, - "1894": 1551, - "1895": 1551, - "1896": 1552, - "1897": 1552, - "1898": 1553, - "1899": 1553, - "1900": 1554, - "1901": 1555, - "1902": 1555, - "1903": 1555, - "1904": 1556, - "1905": 1557, - "1906": 1557, - "1907": 1558, + "1830": 1508, + "1831": 1511, + "1832": 1511, + "1833": 1511, + "1834": 1515, + "1835": 1516, + "1836": 1517, + "1837": 1517, + "1838": 1518, + "1839": 1518, + "1840": 1519, + "1841": 1520, + "1842": 1520, + "1843": 1520, + "1844": 1521, + "1845": 1521, + "1846": 1521, + "1847": 1522, + "1848": 1522, + "1849": 1523, + "1850": 1524, + "1851": 1524, + "1852": 1524, + "1853": 1525, + "1854": 1525, + "1855": 1525, + "1856": 1526, + "1857": 1527, + "1858": 1528, + "1859": 1528, + "1860": 1529, + "1861": 1529, + "1862": 1530, + "1863": 1531, + "1864": 1531, + "1865": 1531, + "1866": 1532, + "1867": 1532, + "1868": 1533, + "1869": 1534, + "1870": 1534, + "1871": 1534, + "1872": 1535, + "1873": 1535, + "1874": 1535, + "1875": 1536, + "1876": 1537, + "1877": 1538, + "1878": 1538, + "1879": 1538, + "1880": 1539, + "1881": 1540, + "1882": 1541, + "1883": 1541, + "1884": 1542, + "1885": 1542, + "1886": 1543, + "1887": 1544, + "1888": 1544, + "1889": 1544, + "1890": 1545, + "1891": 1545, + "1892": 1545, + "1893": 1546, + "1894": 1546, + "1895": 1547, + "1896": 1548, + "1897": 1548, + "1898": 1548, + "1899": 1549, + "1900": 1550, + "1901": 1551, + "1902": 1551, + "1903": 1551, + "1904": 1552, + "1905": 1553, + "1906": 1554, + "1907": 1554, "1908": 1558, - "1909": 1559, + "1909": 1558, "1910": 1559, "1911": 1560, - "1912": 1561, - "1913": 1562, - "1914": 1562, - "1915": 1563, + "1912": 1560, + "1913": 1561, + "1914": 1561, + "1915": 1562, "1916": 1563, "1917": 1564, "1918": 1565, "1919": 1566, - "1920": 1566, - "1921": 1567, - "1922": 1567, - "1923": 1568, - "1924": 1568, - "1925": 1569, - "1926": 1569, - "1927": 1570, - "1928": 1570, - "1929": 1571, - "1930": 1571, - "1931": 1572, - "1932": 1573, - "1933": 1573, - "1934": 1573, - "1935": 1574, - "1936": 1575, - "1937": 1575, - "1938": 1576, - "1939": 1576, - "1940": 1577, - "1941": 1577, - "1942": 1578, - "1943": 1579, - "1944": 1580, - "1945": 1580, - "1946": 1581, - "1947": 1581, - "1948": 1582, - "1949": 1582, - "1950": 1583, - "1951": 1584, - "1952": 1585, - "1953": 1585, - "1954": 1586, - "1955": 1586, - "1956": 1587, - "1957": 1587, - "1958": 1588, - "1959": 1589, - "1960": 1589, - "1961": 1593, - "1962": 1593, - "1963": 1594, - "1964": 1595, - "1965": 1595, - "1966": 1596, - "1967": 1596, - "1968": 1597, - "1969": 1598, - "1970": 1599, - "1971": 1600, - "1972": 1601, - "1973": 1602, - "1974": 1603, - "1975": 1604, - "1976": 1605, - "1977": 1606, - "1978": 1607, - "1979": 1610, - "1980": 1610, - "1981": 1611, - "1982": 1612, - "1983": 1613, - "1984": 1613, - "1985": 1614, + "1920": 1567, + "1921": 1568, + "1922": 1569, + "1923": 1570, + "1924": 1571, + "1925": 1572, + "1926": 1575, + "1927": 1575, + "1928": 1576, + "1929": 1577, + "1930": 1578, + "1931": 1578, + "1932": 1579, + "1933": 1580, + "1934": 1581, + "1935": 1582, + "1936": 1583, + "1937": 1584, + "1938": 1584, + "1939": 1584, + "1940": 1585, + "1941": 1586, + "1942": 1589, + "1943": 1589, + "1944": 1589, + "1945": 1593, + "1946": 1594, + "1947": 1595, + "1948": 1595, + "1949": 1596, + "1950": 1596, + "1951": 1597, + "1952": 1598, + "1953": 1598, + "1954": 1598, + "1955": 1599, + "1956": 1599, + "1957": 1600, + "1958": 1601, + "1959": 1601, + "1960": 1601, + "1961": 1602, + "1962": 1603, + "1963": 1603, + "1964": 1603, + "1965": 1604, + "1966": 1604, + "1967": 1605, + "1968": 1606, + "1969": 1606, + "1970": 1607, + "1971": 1608, + "1972": 1609, + "1973": 1609, + "1974": 1609, + "1975": 1610, + "1976": 1610, + "1977": 1611, + "1978": 1612, + "1979": 1612, + "1980": 1612, + "1981": 1613, + "1982": 1613, + "1983": 1614, + "1984": 1615, + "1985": 1615, "1986": 1615, "1987": 1616, "1988": 1617, - "1989": 1618, - "1990": 1619, - "1991": 1619, + "1989": 1617, + "1990": 1617, + "1991": 1618, "1992": 1619, "1993": 1620, - "1994": 1621, + "1994": 1620, "1995": 1624, "1996": 1624, - "1997": 1624, - "1998": 1628, - "1999": 1629, - "2000": 1630, - "2001": 1630, - "2002": 1631, - "2003": 1631, - "2004": 1632, - "2005": 1632, - "2006": 1633, + "1997": 1625, + "1998": 1626, + "1999": 1626, + "2000": 1627, + "2001": 1627, + "2002": 1628, + "2003": 1629, + "2004": 1630, + "2005": 1631, + "2006": 1632, "2007": 1633, "2008": 1634, "2009": 1634, "2010": 1635, - "2011": 1635, - "2012": 1636, - "2013": 1637, - "2014": 1637, - "2015": 1637, - "2016": 1638, - "2017": 1638, - "2018": 1639, - "2019": 1640, - "2020": 1640, - "2021": 1640, - "2022": 1641, - "2023": 1642, - "2024": 1643, - "2025": 1643, - "2026": 1644, - "2027": 1644, - "2028": 1645, - "2029": 1645, - "2030": 1646, - "2031": 1647, - "2032": 1647, - "2033": 1648, - "2034": 1649, - "2035": 1650, - "2036": 1651, - "2037": 1651, - "2038": 1652, - "2039": 1652, - "2040": 1653, - "2041": 1653, - "2042": 1654, - "2043": 1655, - "2044": 1655, - "2045": 1655, - "2046": 1656, - "2047": 1656, - "2048": 1657, - "2049": 1658, - "2050": 1658, - "2051": 1658, - "2052": 1659, - "2053": 1660, - "2054": 1661, - "2055": 1661, - "2056": 1662, - "2057": 1662, - "2058": 1663, - "2059": 1663, - "2060": 1664, - "2061": 1665, - "2062": 1665, - "2063": 1669, - "2064": 1669, - "2065": 1670, - "2066": 1671, - "2067": 1671, - "2068": 1672, - "2069": 1672, - "2070": 1673, - "2071": 1674, - "2072": 1675, - "2073": 1676, - "2074": 1677, - "2075": 1678, - "2076": 1679, - "2077": 1679, - "2078": 1680, - "2079": 1681, - "2080": 1682, - "2081": 1683, - "2082": 1684, - "2083": 1685, - "2084": 1688, + "2011": 1636, + "2012": 1637, + "2013": 1638, + "2014": 1639, + "2015": 1640, + "2016": 1643, + "2017": 1643, + "2018": 1644, + "2019": 1645, + "2020": 1646, + "2021": 1646, + "2022": 1647, + "2023": 1648, + "2024": 1649, + "2025": 1650, + "2026": 1651, + "2027": 1652, + "2028": 1652, + "2029": 1652, + "2030": 1653, + "2031": 1654, + "2032": 1657, + "2033": 1657, + "2034": 1657, + "2035": 1661, + "2036": 1662, + "2037": 1663, + "2038": 1663, + "2039": 1664, + "2040": 1664, + "2041": 1665, + "2042": 1666, + "2043": 1666, + "2044": 1666, + "2045": 1667, + "2046": 1667, + "2047": 1668, + "2048": 1669, + "2049": 1669, + "2050": 1669, + "2051": 1670, + "2052": 1671, + "2053": 1671, + "2054": 1671, + "2055": 1672, + "2056": 1672, + "2057": 1673, + "2058": 1674, + "2059": 1674, + "2060": 1674, + "2061": 1675, + "2062": 1676, + "2063": 1677, + "2064": 1677, + "2065": 1678, + "2066": 1678, + "2067": 1679, + "2068": 1680, + "2069": 1680, + "2070": 1680, + "2071": 1681, + "2072": 1681, + "2073": 1681, + "2074": 1682, + "2075": 1682, + "2076": 1683, + "2077": 1684, + "2078": 1684, + "2079": 1684, + "2080": 1685, + "2081": 1686, + "2082": 1687, + "2083": 1687, + "2084": 1687, "2085": 1688, - "2086": 1689, - "2087": 1690, - "2088": 1691, - "2089": 1691, - "2090": 1692, - "2091": 1693, - "2092": 1694, - "2093": 1695, - "2094": 1696, - "2095": 1697, - "2096": 1697, - "2097": 1697, - "2098": 1698, - "2099": 1699, - "2100": 1702, - "2101": 1702, - "2102": 1702, - "2103": 1706, - "2104": 1707, - "2105": 1708, - "2106": 1708, - "2107": 1709, - "2108": 1709, - "2109": 1710, - "2110": 1710, - "2111": 1711, - "2112": 1711, - "2113": 1712, - "2114": 1712, - "2115": 1713, - "2116": 1713, - "2117": 1714, - "2118": 1715, - "2119": 1715, - "2120": 1715, - "2121": 1716, - "2122": 1716, - "2123": 1717, - "2124": 1718, - "2125": 1718, - "2126": 1718, - "2127": 1719, - "2128": 1720, - "2129": 1721, - "2130": 1721, - "2131": 1722, - "2132": 1722, - "2133": 1723, - "2134": 1723, - "2135": 1724, - "2136": 1725, - "2137": 1726, - "2138": 1726, - "2139": 1727, - "2140": 1727, - "2141": 1728, - "2142": 1729, - "2143": 1730, - "2144": 1730, - "2145": 1731, - "2146": 1731, - "2147": 1732, - "2148": 1732, - "2149": 1733, - "2150": 1733, - "2151": 1734, - "2152": 1734, - "2153": 1735, - "2154": 1735, - "2155": 1736, - "2156": 1737, - "2157": 1737, - "2158": 1737, - "2159": 1738, - "2160": 1739, - "2161": 1739, - "2162": 1740, - "2163": 1740, - "2164": 1741, - "2165": 1741, - "2166": 1742, - "2167": 1743, - "2168": 1744, - "2169": 1744, - "2170": 1745, - "2171": 1745, - "2172": 1746, - "2173": 1746, - "2174": 1747, - "2175": 1748, - "2176": 1749, - "2177": 1749, - "2178": 1750, - "2179": 1750, - "2180": 1751, - "2181": 1751, - "2182": 1752, - "2183": 1753, - "2184": 1753, - "2185": 1754, - "2186": 1755, - "2187": 1756, - "2188": 1756, - "2189": 1757, - "2190": 1758, - "2191": 1758, - "2192": 1759, - "2193": 1760, - "2194": 1761, - "2195": 1762, - "2196": 1763, - "2197": 1763, - "2198": 1764, - "2199": 1764, - "2200": 1765, - "2201": 1765, - "2202": 1766, - "2203": 1767, - "2204": 1768, - "2205": 1769, - "2206": 1769, - "2207": 1770, + "2086": 1688, + "2087": 1689, + "2088": 1690, + "2089": 1690, + "2090": 1691, + "2091": 1692, + "2092": 1693, + "2093": 1693, + "2094": 1694, + "2095": 1695, + "2096": 1695, + "2097": 1696, + "2098": 1697, + "2099": 1698, + "2100": 1699, + "2101": 1699, + "2102": 1699, + "2103": 1700, + "2104": 1701, + "2105": 1702, + "2106": 1703, + "2107": 1704, + "2108": 1704, + "2109": 1705, + "2110": 1705, + "2111": 1706, + "2112": 1707, + "2113": 1707, + "2114": 1707, + "2115": 1708, + "2116": 1708, + "2117": 1709, + "2118": 1710, + "2119": 1710, + "2120": 1710, + "2121": 1711, + "2122": 1712, + "2123": 1712, + "2124": 1712, + "2125": 1713, + "2126": 1713, + "2127": 1714, + "2128": 1715, + "2129": 1715, + "2130": 1715, + "2131": 1716, + "2132": 1717, + "2133": 1718, + "2134": 1718, + "2135": 1719, + "2136": 1719, + "2137": 1720, + "2138": 1721, + "2139": 1721, + "2140": 1721, + "2141": 1722, + "2142": 1722, + "2143": 1722, + "2144": 1723, + "2145": 1723, + "2146": 1724, + "2147": 1725, + "2148": 1725, + "2149": 1725, + "2150": 1726, + "2151": 1727, + "2152": 1728, + "2153": 1728, + "2154": 1728, + "2155": 1729, + "2156": 1729, + "2157": 1730, + "2158": 1731, + "2159": 1731, + "2160": 1732, + "2161": 1733, + "2162": 1734, + "2163": 1734, + "2164": 1735, + "2165": 1736, + "2166": 1736, + "2167": 1736, + "2168": 1737, + "2169": 1738, + "2170": 1739, + "2171": 1740, + "2172": 1740, + "2173": 1740, + "2174": 1741, + "2175": 1742, + "2176": 1743, + "2177": 1744, + "2178": 1744, + "2179": 1748, + "2180": 1748, + "2181": 1749, + "2182": 1750, + "2183": 1750, + "2184": 1751, + "2185": 1752, + "2186": 1752, + "2187": 1753, + "2188": 1754, + "2189": 1754, + "2190": 1755, + "2191": 1756, + "2192": 1757, + "2193": 1757, + "2194": 1758, + "2195": 1759, + "2196": 1760, + "2197": 1760, + "2198": 1760, + "2199": 1761, + "2200": 1762, + "2201": 1762, + "2202": 1762, + "2203": 1763, + "2204": 1764, + "2205": 1765, + "2206": 1766, + "2207": 1766, "2208": 1770, - "2209": 1771, + "2209": 1770, "2210": 1771, "2211": 1772, "2212": 1772, "2213": 1773, - "2214": 1773, + "2214": 1774, "2215": 1774, - "2216": 1774, - "2217": 1775, + "2216": 1775, + "2217": 1776, "2218": 1776, - "2219": 1776, - "2220": 1776, - "2221": 1777, - "2222": 1777, - "2223": 1778, - "2224": 1779, - "2225": 1779, - "2226": 1779, - "2227": 1780, - "2228": 1781, - "2229": 1782, - "2230": 1782, - "2231": 1783, - "2232": 1783, - "2233": 1784, - "2234": 1784, - "2235": 1785, - "2236": 1786, - "2237": 1787, - "2238": 1787, - "2239": 1788, - "2240": 1788, - "2241": 1789, - "2242": 1790, - "2243": 1791, - "2244": 1791, - "2245": 1792, - "2246": 1792, - "2247": 1793, - "2248": 1793, - "2249": 1794, - "2250": 1794, - "2251": 1795, - "2252": 1795, - "2253": 1796, - "2254": 1796, - "2255": 1797, - "2256": 1798, - "2257": 1798, - "2258": 1798, - "2259": 1799, - "2260": 1800, - "2261": 1800, - "2262": 1801, - "2263": 1801, - "2264": 1802, - "2265": 1802, - "2266": 1803, - "2267": 1804, - "2268": 1805, - "2269": 1805, - "2270": 1806, - "2271": 1806, - "2272": 1807, - "2273": 1807, - "2274": 1808, - "2275": 1809, - "2276": 1810, - "2277": 1810, - "2278": 1811, - "2279": 1811, - "2280": 1812, - "2281": 1812, - "2282": 1813, - "2283": 1814, - "2284": 1814, - "2285": 1815, - "2286": 1816, - "2287": 1817, - "2288": 1817, - "2289": 1818, - "2290": 1819, - "2291": 1819, - "2292": 1819, - "2293": 1820, - "2294": 1821, - "2295": 1822, - "2296": 1823, - "2297": 1824, - "2298": 1824, - "2299": 1825, - "2300": 1825, - "2301": 1826, - "2302": 1826, - "2303": 1827, - "2304": 1828, - "2305": 1829, - "2306": 1829, - "2307": 1833, - "2308": 1833, - "2309": 1834, - "2310": 1835, - "2311": 1835, - "2312": 1836, - "2313": 1837, - "2314": 1837, - "2315": 1838, - "2316": 1839, - "2317": 1839, - "2318": 1840, - "2319": 1841, - "2320": 1842, - "2321": 1842, - "2322": 1843, - "2323": 1844, - "2324": 1845, - "2325": 1845, - "2326": 1845, - "2327": 1846, - "2328": 1847, - "2329": 1847, - "2330": 1847, - "2331": 1848, - "2332": 1849, - "2333": 1850, - "2334": 1851, - "2335": 1851, - "2336": 1855, - "2337": 1855, - "2338": 1856, - "2339": 1857, - "2340": 1857, - "2341": 1858, - "2342": 1859, - "2343": 1859, - "2344": 1860, - "2345": 1861, - "2346": 1861, - "2347": 1862, - "2348": 1863, - "2349": 1864, - "2350": 1864, - "2351": 1865, - "2352": 1866, - "2353": 1867, - "2354": 1868, - "2355": 1869, - "2356": 1870, - "2357": 1871, - "2358": 1872, - "2359": 1873, - "2360": 1874, - "2361": 1875, - "2362": 1876, - "2363": 1877, - "2364": 1878, - "2365": 1879, - "2366": 1882, - "2367": 1882, - "2368": 1883, - "2369": 1884, - "2370": 1885, - "2371": 1885, - "2372": 1886, - "2373": 1887, - "2374": 1888, - "2375": 1889, - "2376": 1890, - "2377": 1891, - "2378": 1891, - "2379": 1891, - "2380": 1892, - "2381": 1893, - "2382": 1896, - "2383": 1896, - "2384": 1896, - "2385": 1900, - "2386": 1901, - "2387": 1902, - "2388": 1902, - "2389": 1903, - "2390": 1903, - "2391": 1904, - "2392": 1904, - "2393": 1904, - "2394": 1904, - "2395": 1905, - "2396": 1905, - "2397": 1906, - "2398": 1906, - "2399": 1907, - "2400": 1907, - "2401": 1908, - "2402": 1909, - "2403": 1910, - "2404": 1910, - "2405": 1911, - "2406": 1911, - "2407": 1912, - "2408": 1912, - "2409": 1913, - "2410": 1914, - "2411": 1914, - "2412": 1914, - "2413": 1915, - "2414": 1916, - "2415": 1916, - "2416": 1917, - "2417": 1917, - "2418": 1918, - "2419": 1918, - "2420": 1919, - "2421": 1920, - "2422": 1921, - "2423": 1921, - "2424": 1922, - "2425": 1922, - "2426": 1923, - "2427": 1923, - "2428": 1924, - "2429": 1925, - "2430": 1925, - "2431": 1929, - "2432": 1929, - "2433": 1930, - "2434": 1931, - "2435": 1932, - "2436": 1933, - "2437": 1934, - "2438": 1937, - "2439": 1937, - "2440": 1938, - "2441": 1939, - "2442": 1940, - "2443": 1940, - "2444": 1941, - "2445": 1942, - "2446": 1943, - "2447": 1944, - "2448": 1945, - "2449": 1945, - "2450": 1945, - "2451": 1946, - "2452": 1946, - "2453": 1946, - "2454": 1947, - "2455": 1948, - "2456": 1951, - "2457": 1951, - "2458": 1951, - "2459": 1955, - "2460": 1955, - "2461": 1956, - "2462": 1957, - "2463": 1957, - "2464": 1958, - "2465": 1959, - "2466": 1960, - "2467": 1961, - "2468": 1961, - "2469": 1962, - "2470": 1963, - "2471": 1964, - "2472": 1965, - "2473": 1966, - "2474": 1967, - "2475": 1970, - "2476": 1970, - "2477": 1971, - "2478": 1972, - "2479": 1973, - "2480": 1973, - "2481": 1974, - "2482": 1975, - "2483": 1976, - "2484": 1977, - "2485": 1978, - "2486": 1979, - "2487": 1979, - "2488": 1979, - "2489": 1980, - "2490": 1981, - "2491": 1984, - "2492": 1984, - "2493": 1984, - "2494": 1988, - "2495": 1988, - "2496": 1989, - "2497": 1990, - "2498": 1990, - "2499": 1991, - "2500": 1992, - "2501": 1993, - "2502": 1993, - "2503": 1994, - "2504": 1995, - "2505": 1996, - "2506": 1996, - "2507": 1997, - "2508": 1998, - "2509": 1999, - "2510": 1999, - "2511": 2003, - "2512": 2003, - "2513": 2004, - "2514": 2005, - "2515": 2006, - "2516": 2007, - "2517": 2008, - "2518": 2009, - "2519": 2010, - "2520": 2011, - "2521": 2012, - "2522": 2013, - "2523": 2014, - "2524": 2015, - "2525": 2016, - "2526": 2017, - "2527": 2020, - "2528": 2020, - "2529": 2021, - "2530": 2022, - "2531": 2023, - "2532": 2023, - "2533": 2024, - "2534": 2025, - "2535": 2026, - "2536": 2027, - "2537": 2028, - "2538": 2029, - "2539": 2029, - "2540": 2029, - "2541": 2030, - "2542": 2031, - "2543": 2034, - "2544": 2034, - "2545": 2034, - "2546": 2038, - "2547": 2038, - "2548": 2039, - "2549": 2040, - "2550": 2040, - "2551": 2041, - "2552": 2042, - "2553": 2043, - "2554": 2043, - "2555": 2044, - "2556": 2045, - "2557": 2046, - "2558": 2046, - "2559": 2047, - "2560": 2048, - "2561": 2049, - "2562": 2049, - "2563": 2053, - "2564": 2053, - "2565": 2054, - "2566": 2055, - "2567": 2056, - "2568": 2057, - "2569": 2058, - "2570": 2061, - "2571": 2061, - "2572": 2062, - "2573": 2063, - "2574": 2064, - "2575": 2064, - "2576": 2065, - "2577": 2066, - "2578": 2067, - "2579": 2068, - "2580": 2069, - "2581": 2069, - "2582": 2069, - "2583": 2070, - "2584": 2070, - "2585": 2070, - "2586": 2071, - "2587": 2072, - "2588": 2075, - "2589": 2075, - "2590": 2075, - "2591": 2079, - "2592": 2079, - "2593": 2080, - "2594": 2081, - "2595": 2082, - "2596": 2083, - "2597": 2084, - "2598": 2085, - "2599": 2086, - "2600": 2087, - "2601": 2088, - "2602": 2089, - "2603": 2090, - "2604": 2091, - "2605": 2092, - "2606": 2093, - "2607": 2096, - "2608": 2096, - "2609": 2097, - "2610": 2098, - "2611": 2099, - "2612": 2099, - "2613": 2100, - "2614": 2101, - "2615": 2102, - "2616": 2103, - "2617": 2104, - "2618": 2105, - "2619": 2105, - "2620": 2105, - "2621": 2106, - "2622": 2107, - "2623": 2110, - "2624": 2110, - "2625": 2110, - "2626": 2114, - "2627": 2114, - "2628": 2115, - "2629": 2116, - "2630": 2116, - "2631": 2117, - "2632": 2118, - "2633": 2119, - "2634": 2119, - "2635": 2120, - "2636": 2121, - "2637": 2122, - "2638": 2122, - "2639": 2123, - "2640": 2124, - "2641": 2125, - "2642": 2125, - "2643": 2129, - "2644": 2129, - "2645": 2130, - "2646": 2131, - "2647": 2132, - "2648": 2133, - "2649": 2134, - "2650": 2135, - "2651": 2135, - "2652": 2136, - "2653": 2137, - "2654": 2138, - "2655": 2138, - "2656": 2142, - "2657": 2142, - "2658": 2143, - "2659": 2144, - "2660": 2145, - "2661": 2146, - "2662": 2147, - "2663": 2148, - "2664": 2149, - "2665": 2150, - "2666": 2151, - "2667": 2152, - "2668": 2153, - "2669": 2154, - "2670": 2155, - "2671": 2156, - "2672": 2159, - "2673": 2159, - "2674": 2160, - "2675": 2161, - "2676": 2162, - "2677": 2162, - "2678": 2163, - "2679": 2164, - "2680": 2165, - "2681": 2166, - "2682": 2167, - "2683": 2168, - "2684": 2168, - "2685": 2168, - "2686": 2169, - "2687": 2170, - "2688": 2173, - "2689": 2173, - "2690": 2173, - "2691": 2177, - "2692": 2178, - "2693": 2179, - "2694": 2179, - "2695": 2180, - "2696": 2180, - "2697": 2181, - "2698": 2181, - "2699": 2182, - "2700": 2182, - "2701": 2183, - "2702": 2183, - "2703": 2184, - "2704": 2184, - "2705": 2185, - "2706": 2186, - "2707": 2186, - "2708": 2186, - "2709": 2187, - "2710": 2188, - "2711": 2188, - "2712": 2189, - "2713": 2189, - "2714": 2190, - "2715": 2190, - "2716": 2191, - "2717": 2192, - "2718": 2193, - "2719": 2193, - "2720": 2194, - "2721": 2194, - "2722": 2195, - "2723": 2195, - "2724": 2196, - "2725": 2197, - "2726": 2198, - "2727": 2199, - "2728": 2199, - "2729": 2200, - "2730": 2200, - "2731": 2201, - "2732": 2201, - "2733": 2202, - "2734": 2202, - "2735": 2203, - "2736": 2203, - "2737": 2204, - "2738": 2204, - "2739": 2205, - "2740": 2206, - "2741": 2206, - "2742": 2206, - "2743": 2207, - "2744": 2208, - "2745": 2208, - "2746": 2209, - "2747": 2209, - "2748": 2210, - "2749": 2210, - "2750": 2211, - "2751": 2212, - "2752": 2213, - "2753": 2213, - "2754": 2214, - "2755": 2214, - "2756": 2215, - "2757": 2215, - "2758": 2216, - "2759": 2217, - "2760": 2218, - "2761": 2219, - "2762": 2220, - "2763": 2221, - "2764": 2221, - "2765": 2225, - "2766": 2225, - "2767": 2226, - "2768": 2227, - "2769": 2227, - "2770": 2228, - "2771": 2229, - "2772": 2229, - "2773": 2230, - "2774": 2231, - "2775": 2232, - "2776": 2233, - "2777": 2234, - "2778": 2235, - "2779": 2236, - "2780": 2237, - "2781": 2238, - "2782": 2239, - "2783": 2240, - "2784": 2241, - "2785": 2242, - "2786": 2243, - "2787": 2246, - "2788": 2246, - "2789": 2247, - "2790": 2248, - "2791": 2249, - "2792": 2249, - "2793": 2250, - "2794": 2251, - "2795": 2252, - "2796": 2253, - "2797": 2254, - "2798": 2255, - "2799": 2255, - "2800": 2255, - "2801": 2256, - "2802": 2257, - "2803": 2260, - "2804": 2260, - "2805": 2260, - "2806": 2264, - "2807": 2265, - "2808": 2266, - "2809": 2266, - "2810": 2267, - "2811": 2267, - "2812": 2268, - "2813": 2268, - "2814": 2268, - "2815": 2268, - "2816": 2269, - "2817": 2269, - "2818": 2270, - "2819": 2270, - "2820": 2271, - "2821": 2272, - "2822": 2273, - "2823": 2274, - "2824": 2274, - "2825": 2275, - "2826": 2275, - "2827": 2276, - "2828": 2277, - "2829": 2278, - "2830": 2278, - "2831": 2278, - "2832": 2279, - "2833": 2280, - "2834": 2280, - "2835": 2281, - "2836": 2281, - "2837": 2282, - "2838": 2282, - "2839": 2283, - "2840": 2284, - "2841": 2284, - "2842": 2285, - "2843": 2285, - "2844": 2286, - "2845": 2287, - "2846": 2287, - "2847": 2288, - "2848": 2289, - "2849": 2290, - "2850": 2291, - "2851": 2292, - "2852": 2293, - "2853": 2294, - "2854": 2295, - "2855": 2295, - "2856": 2296, - "2857": 2297, - "2858": 2298, - "2859": 2299, - "2860": 2299, - "2861": 2299, - "2862": 2300, - "2863": 2300, - "2864": 2301, - "2865": 2301, - "2866": 2302, - "2867": 2303, - "2868": 2304, - "2869": 2304, - "2870": 2305, - "2871": 2305, - "2872": 2306, - "2873": 2306, - "2874": 2307, - "2875": 2308, - "2876": 2308, - "2877": 2309, - "2878": 2309, - "2879": 2310, - "2880": 2311, - "2881": 2311, - "2882": 2311, - "2883": 2312, - "2884": 2312, - "2885": 2313, - "2886": 2314, - "2887": 2314, - "2888": 2314, - "2889": 2315, - "2890": 2316, - "2891": 2317, - "2892": 2318, - "2893": 2319, - "2894": 2320, - "2895": 2321, - "2896": 2321, - "2897": 2322, - "2898": 2323, - "2899": 2324, - "2900": 2325, - "2901": 2325, - "2902": 2325, - "2903": 2326, - "2904": 2326, - "2905": 2327, - "2906": 2327, - "2907": 2328, - "2908": 2329, - "2909": 2330, - "2910": 2330, - "2911": 2331, - "2912": 2331, - "2913": 2332, - "2914": 2332, - "2915": 2333, - "2916": 2334, - "2917": 2334, - "2918": 2338, - "2919": 2338, - "2920": 2339, - "2921": 2340, - "2922": 2341, - "2923": 2342, - "2924": 2343, - "2925": 2346, - "2926": 2346, - "2927": 2347, - "2928": 2348, - "2929": 2349, - "2930": 2349, - "2931": 2350, - "2932": 2351, - "2933": 2352, - "2934": 2353, - "2935": 2354, - "2936": 2355, - "2937": 2355, - "2938": 2355, - "2939": 2356, - "2940": 2357, - "2941": 2360, - "2942": 2360, - "2943": 2360, - "2944": 2364, - "2945": 2365, - "2946": 2366, - "2947": 2366, - "2948": 2367, - "2949": 2367, - "2950": 2368, - "2951": 2368, - "2952": 2369, - "2953": 2369, - "2954": 2370, - "2955": 2370, - "2956": 2371, - "2957": 2372, - "2958": 2373, - "2959": 2373, - "2960": 2373, - "2961": 2374, - "2962": 2375, - "2963": 2375, - "2964": 2376, - "2965": 2376, - "2966": 2377, - "2967": 2378, - "2968": 2379, - "2969": 2379, - "2970": 2379, - "2971": 2380, - "2972": 2381, - "2973": 2381, - "2974": 2382, - "2975": 2382, - "2976": 2383, - "2977": 2383, - "2978": 2384, - "2979": 2385, - "2980": 2385, - "2981": 2386, - "2982": 2386, - "2983": 2387, - "2984": 2388, - "2985": 2388, - "2986": 2388, - "2987": 2389, - "2988": 2389, - "2989": 2390, - "2990": 2391, - "2991": 2391, - "2992": 2391, - "2993": 2392, - "2994": 2393, - "2995": 2394, - "2996": 2395, - "2997": 2396, - "2998": 2397, - "2999": 2398, - "3000": 2398, - "3001": 2399, - "3002": 2400, - "3003": 2401, - "3004": 2402, - "3005": 2402, - "3006": 2402, - "3007": 2403, - "3008": 2403, - "3009": 2404, - "3010": 2404, - "3011": 2405, - "3012": 2406, - "3013": 2407, - "3014": 2407, - "3015": 2408, - "3016": 2408, - "3017": 2409, - "3018": 2409, - "3019": 2410, - "3020": 2411, - "3021": 2411, - "3022": 2412, - "3023": 2412, - "3024": 2413, - "3025": 2414, - "3026": 2414, - "3027": 2414, - "3028": 2415, - "3029": 2415, - "3030": 2416, - "3031": 2417, - "3032": 2417, - "3033": 2417, - "3034": 2418, - "3035": 2419, - "3036": 2420, - "3037": 2421, - "3038": 2422, - "3039": 2423, - "3040": 2424, - "3041": 2424, - "3042": 2425, - "3043": 2426, - "3044": 2427, - "3045": 2428, - "3046": 2428, - "3047": 2428, - "3048": 2429, - "3049": 2429, - "3050": 2430, - "3051": 2430, - "3052": 2431, - "3053": 2432, - "3054": 2433, - "3055": 2433, - "3056": 2434, - "3057": 2434, - "3058": 2435, - "3059": 2435, - "3060": 2436, - "3061": 2437, - "3062": 2437, - "3063": 2438, - "3064": 2438, - "3065": 2439, - "3066": 2440, - "3067": 2440, - "3068": 2440, - "3069": 2441, - "3070": 2442, - "3071": 2443, - "3072": 2443, - "3073": 2443, - "3074": 2444, - "3075": 2445, - "3076": 2446, - "3077": 2447, - "3078": 2448, - "3079": 2449, - "3080": 2450, - "3081": 2450, - "3082": 2451, - "3083": 2452, - "3084": 2453, - "3085": 2454, - "3086": 2454, - "3087": 2454, - "3088": 2455, - "3089": 2455, - "3090": 2456, - "3091": 2456, - "3092": 2457, - "3093": 2458, - "3094": 2459, - "3095": 2459, - "3096": 2460, - "3097": 2460, - "3098": 2461, - "3099": 2461, - "3100": 2462, - "3101": 2463, - "3102": 2463, - "3103": 2467, - "3104": 2467, - "3105": 2468, - "3106": 2469, - "3107": 2469, - "3108": 2470, - "3109": 2470, - "3110": 2471, - "3111": 2472, - "3112": 2472, - "3113": 2473, - "3114": 2473, - "3115": 2474, - "3116": 2475, - "3117": 2476, - "3118": 2477, - "3119": 2478, - "3120": 2478, - "3121": 2479, - "3122": 2480, - "3123": 2481, - "3124": 2482, - "3125": 2483, - "3126": 2484, - "3127": 2485, - "3128": 2486, - "3129": 2487, - "3130": 2488, - "3131": 2489, - "3132": 2490, - "3133": 2491, - "3134": 2494, - "3135": 2494, - "3136": 2495, - "3137": 2496, - "3138": 2497, - "3139": 2497, - "3140": 2498, - "3141": 2499, - "3142": 2500, - "3143": 2501, - "3144": 2502, - "3145": 2503, - "3146": 2503, - "3147": 2503, - "3148": 2504, - "3149": 2505, - "3150": 2508, - "3151": 2508, - "3152": 2508, - "3153": 2512, - "3154": 2513, - "3155": 2514, - "3156": 2514, - "3157": 2515, - "3158": 2515, - "3159": 2516, - "3160": 2516, - "3161": 2517, - "3162": 2517, - "3163": 2518, - "3164": 2518, - "3165": 2519, - "3166": 2519, - "3167": 2520, - "3168": 2521, - "3169": 2521, - "3170": 2521, - "3171": 2522, - "3172": 2523, - "3173": 2523, - "3174": 2524, - "3175": 2524, - "3176": 2525, - "3177": 2525, - "3178": 2526, - "3179": 2527, - "3180": 2527, - "3181": 2528, - "3182": 2529, - "3183": 2530, - "3184": 2530, - "3185": 2530, - "3186": 2531, - "3187": 2532, - "3188": 2533, - "3189": 2534, - "3190": 2535, - "3191": 2536, - "3192": 2536, - "3193": 2537, - "3194": 2538, - "3195": 2539, - "3196": 2540, - "3197": 2540, - "3198": 2540, - "3199": 2541, - "3200": 2541, - "3201": 2542, - "3202": 2542, - "3203": 2543, - "3204": 2544, - "3205": 2545, - "3206": 2545, - "3207": 2546, - "3208": 2546, - "3209": 2547, - "3210": 2547, - "3211": 2548, - "3212": 2549, - "3213": 2549, - "3214": 2550, - "3215": 2550, - "3216": 2551, - "3217": 2552, - "3218": 2552, - "3219": 2552, - "3220": 2553, - "3221": 2554, - "3222": 2555, - "3223": 2556, - "3224": 2557, - "3225": 2558, - "3226": 2558, - "3227": 2559, - "3228": 2560, - "3229": 2561, - "3230": 2562, - "3231": 2562, - "3232": 2562, - "3233": 2563, - "3234": 2563, - "3235": 2564, - "3236": 2564, - "3237": 2565, - "3238": 2566, - "3239": 2567, - "3240": 2567, - "3241": 2568, - "3242": 2568, - "3243": 2569, - "3244": 2569, - "3245": 2570, - "3246": 2571, - "3247": 2571, - "3248": 2572, - "3249": 2572, - "3250": 2573, - "3251": 2574, - "3252": 2574, - "3253": 2574, - "3254": 2575, - "3255": 2576, - "3256": 2577, - "3257": 2578, - "3258": 2579, - "3259": 2580, - "3260": 2580, - "3261": 2581, - "3262": 2582, - "3263": 2583, - "3264": 2584, - "3265": 2584, - "3266": 2584, - "3267": 2585, - "3268": 2585, - "3269": 2586, - "3270": 2586, - "3271": 2587, - "3272": 2588, - "3273": 2589, - "3274": 2589, - "3275": 2590, - "3276": 2590, - "3277": 2591, - "3278": 2591, - "3279": 2592, - "3280": 2593, - "3281": 2593, - "3282": 2594, - "3283": 2594, - "3284": 2595, - "3285": 2596, - "3286": 2596, - "3287": 2596, - "3288": 2597, - "3289": 2598, - "3290": 2599, - "3291": 2600, - "3292": 2601, - "3293": 2602, - "3294": 2602, - "3295": 2603, - "3296": 2604, - "3297": 2605, - "3298": 2606, - "3299": 2606, - "3300": 2606, - "3301": 2607, - "3302": 2607, - "3303": 2608, - "3304": 2608, - "3305": 2609, - "3306": 2610, - "3307": 2611, - "3308": 2611, - "3309": 2612, - "3310": 2612, - "3311": 2613, - "3312": 2613, - "3313": 2614, - "3314": 2615, - "3315": 2615, - "3316": 2619, - "3317": 2619, - "3318": 2620, - "3319": 2621, - "3320": 2621, - "3321": 2622, - "3322": 2623, - "3323": 2623, - "3324": 2624, - "3325": 2625, - "3326": 2625, - "3327": 2625, - "3328": 2626, - "3329": 2627, - "3330": 2627, - "3331": 2631, - "3332": 2631, - "3333": 2632, - "3334": 2633, - "3335": 2633, - "3336": 2634, - "3337": 2635, - "3338": 2636, - "3339": 2636, - "3340": 2637, - "3341": 2637, - "3342": 2638, - "3343": 2639, - "3344": 2640, - "3345": 2641, - "3346": 2642, - "3347": 2642, - "3348": 2643, - "3349": 2644, - "3350": 2645, - "3351": 2646, - "3352": 2647, - "3353": 2648, - "3354": 2649, - "3355": 2650, - "3356": 2651, - "3357": 2651, - "3358": 2652, - "3359": 2652, - "3360": 2653, - "3361": 2654, - "3362": 2654, - "3363": 2655, - "3364": 2656, - "3365": 2656, - "3366": 2656, - "3367": 2657, - "3368": 2657, - "3369": 2658, - "3370": 2659, - "3371": 2659, - "3372": 2659, - "3373": 2660, - "3374": 2661, - "3375": 2662, - "3376": 2663, - "3377": 2664, - "3378": 2665, - "3379": 2665, - "3380": 2665, - "3381": 2666, - "3382": 2667, - "3383": 2667, - "3384": 2668, - "3385": 2668, - "3386": 2668, - "3387": 2669, - "3388": 2670, - "3389": 2670, - "3390": 2671, - "3391": 2671, - "3392": 2671, - "3393": 2672, - "3394": 2673, - "3395": 2673, - "3396": 2674, - "3397": 2674, - "3398": 2674, - "3399": 2675, - "3400": 2676, - "3401": 2676, - "3402": 2677, - "3403": 2677, - "3404": 2681, - "3405": 2681, - "3406": 2682, - "3407": 2683, - "3408": 2683, - "3409": 2684, - "3410": 2684, - "3411": 2685, - "3412": 2686, - "3413": 2686, - "3414": 2687, - "3415": 2687, - "3416": 2688, - "3417": 2689, - "3418": 2690, - "3419": 2691, - "3420": 2692, - "3421": 2692, - "3422": 2693, - "3423": 2694, - "3424": 2695, - "3425": 2696, - "3426": 2697, - "3427": 2698, - "3428": 2699, - "3429": 2700, - "3430": 2701, - "3431": 2701, - "3432": 2702, - "3433": 2702, - "3434": 2703, - "3435": 2704, - "3436": 2704, - "3437": 2705, - "3438": 2706, - "3439": 2706, - "3440": 2706, - "3441": 2707, - "3442": 2707, - "3443": 2708, - "3444": 2709, - "3445": 2709, - "3446": 2709, - "3447": 2710, - "3448": 2711, - "3449": 2712, - "3450": 2713, - "3451": 2714, - "3452": 2714, - "3453": 2715, - "3454": 2715, - "3455": 2715, - "3456": 2716, - "3457": 2717, - "3458": 2717, - "3459": 2718, - "3460": 2718, - "3461": 2718, - "3462": 2719, - "3463": 2720, - "3464": 2720, - "3465": 2721, - "3466": 2721, - "3467": 2721, - "3468": 2722, - "3469": 2723, - "3470": 2723, - "3471": 2724, - "3472": 2724, - "3473": 2728, - "3474": 2728, - "3475": 2729, - "3476": 2730, - "3477": 2730, - "3478": 2731, - "3479": 2731, - "3480": 2732, - "3481": 2733, - "3482": 2733, - "3483": 2734, - "3484": 2734, - "3485": 2735, - "3486": 2736, - "3487": 2737, - "3488": 2738, - "3489": 2739, - "3490": 2739, - "3491": 2740, - "3492": 2741, - "3493": 2742, - "3494": 2743, - "3495": 2744, - "3496": 2745, - "3497": 2746, - "3498": 2747, - "3499": 2748, - "3500": 2748, - "3501": 2749, - "3502": 2749, - "3503": 2750, - "3504": 2751, - "3505": 2751, - "3506": 2752, - "3507": 2753, - "3508": 2753, - "3509": 2753, - "3510": 2754, - "3511": 2754, - "3512": 2755, - "3513": 2756, - "3514": 2756, - "3515": 2756, - "3516": 2757, - "3517": 2758, - "3518": 2759, - "3519": 2760, - "3520": 2761, - "3521": 2761, - "3522": 2762, - "3523": 2762, - "3524": 2762, - "3525": 2763, - "3526": 2764, - "3527": 2764, - "3528": 2765, - "3529": 2765, - "3530": 2765, - "3531": 2766, - "3532": 2767, - "3533": 2767, - "3534": 2768, - "3535": 2768, - "3536": 2772, - "3537": 2772, - "3538": 2773, - "3539": 2774, - "3540": 2774, - "3541": 2775, - "3542": 2775, - "3543": 2776, - "3544": 2777, - "3545": 2777, - "3546": 2778, - "3547": 2778, - "3548": 2779, - "3549": 2780, - "3550": 2781, - "3551": 2782, - "3552": 2783, - "3553": 2783, - "3554": 2784, - "3555": 2785, - "3556": 2786, - "3557": 2787, - "3558": 2788, - "3559": 2789, - "3560": 2790, - "3561": 2791, - "3562": 2792, - "3563": 2792, - "3564": 2793, - "3565": 2793, - "3566": 2794, - "3567": 2795, - "3568": 2795, - "3569": 2796, - "3570": 2797, - "3571": 2797, - "3572": 2797, - "3573": 2798, - "3574": 2798, - "3575": 2799, - "3576": 2800, - "3577": 2800, - "3578": 2800, - "3579": 2801, - "3580": 2802, - "3581": 2803, - "3582": 2804, - "3583": 2805, - "3584": 2805, - "3585": 2806, - "3586": 2806, - "3587": 2806, - "3588": 2807, - "3589": 2808, - "3590": 2808, - "3591": 2809, - "3592": 2809, - "3593": 2813, - "3594": 2813, - "3595": 2814, - "3596": 2815, - "3597": 2816, - "3598": 2817, - "3599": 2818, - "3600": 2821, - "3601": 2821, - "3602": 2822, - "3603": 2823, - "3604": 2824, - "3605": 2824, - "3606": 2825, - "3607": 2826, - "3608": 2827, - "3609": 2828, - "3610": 2829, - "3611": 2830, - "3612": 2831, - "3613": 2831, - "3614": 2831, - "3615": 2832, - "3616": 2833, - "3617": 2836, - "3618": 2836, - "3619": 2836, - "3620": 2840, - "3621": 2840, - "3622": 2841, - "3623": 2842, - "3624": 2842, - "3625": 2842, - "3626": 2843, - "3627": 2843, - "3628": 2844, - "3629": 2845, - "3630": 2845, - "3631": 2845, - "3632": 2846, - "3633": 2847, - "3634": 2848, - "3635": 2849, - "3636": 2850, - "3637": 2850, - "3638": 2854, - "3639": 2855, - "3640": 2856, - "3641": 2856, - "3642": 2857, - "3643": 2857, - "3644": 2858, - "3645": 2858, - "3646": 2859, - "3647": 2859, - "3648": 2860, - "3649": 2860, - "3650": 2861, - "3651": 2862, - "3652": 2863, - "3653": 2863, - "3654": 2863, - "3655": 2864, - "3656": 2865, - "3657": 2865, - "3658": 2866, - "3659": 2866, - "3660": 2867, - "3661": 2868, - "3662": 2869, - "3663": 2869, - "3664": 2869, - "3665": 2870, - "3666": 2871, - "3667": 2871, - "3668": 2872, - "3669": 2872, - "3670": 2873, - "3671": 2873, - "3672": 2874, - "3673": 2875, - "3674": 2875, - "3675": 2876, - "3676": 2876, - "3677": 2877, - "3678": 2878, - "3679": 2878, - "3680": 2878, - "3681": 2879, - "3682": 2879, - "3683": 2880, - "3684": 2881, - "3685": 2881, - "3686": 2881, - "3687": 2882, - "3688": 2883, - "3689": 2884, - "3690": 2885, - "3691": 2886, - "3692": 2887, - "3693": 2888, - "3694": 2888, - "3695": 2889, - "3696": 2890, - "3697": 2891, - "3698": 2892, - "3699": 2892, - "3700": 2892, - "3701": 2893, - "3702": 2893, - "3703": 2894, - "3704": 2894, - "3705": 2895, - "3706": 2896, - "3707": 2897, - "3708": 2897, - "3709": 2898, - "3710": 2898, - "3711": 2899, - "3712": 2899, - "3713": 2900, - "3714": 2901, - "3715": 2901, - "3716": 2902, - "3717": 2902, - "3718": 2903, - "3719": 2904, - "3720": 2905, - "3721": 2905, - "3722": 2906, - "3723": 2907, - "3724": 2908, - "3725": 2909, - "3726": 2909, - "3727": 2909, - "3728": 2910, - "3729": 2910, - "3730": 2911, - "3731": 2911, - "3732": 2912, - "3733": 2913, - "3734": 2914, - "3735": 2914, - "3736": 2915, - "3737": 2915, - "3738": 2916, - "3739": 2916, - "3740": 2917, - "3741": 2918, - "3742": 2918, - "3743": 2919, - "3744": 2919, - "3745": 2920, - "3746": 2921, - "3747": 2921, - "3748": 2921, - "3749": 2922, - "3750": 2923, - "3751": 2924, - "3752": 2924, - "3753": 2924, - "3754": 2925, - "3755": 2926, - "3756": 2927, - "3757": 2928, - "3758": 2929, - "3759": 2930, - "3760": 2931, - "3761": 2931, - "3762": 2932, - "3763": 2933, - "3764": 2934, - "3765": 2935, - "3766": 2935, - "3767": 2935, - "3768": 2936, - "3769": 2936, - "3770": 2937, - "3771": 2937, - "3772": 2938, - "3773": 2939, - "3774": 2940, - "3775": 2940, - "3776": 2941, - "3777": 2941, - "3778": 2942, - "3779": 2942, - "3780": 2943, - "3781": 2944, - "3782": 2944, - "3783": 2948, - "3784": 2948, - "3785": 2949, - "3786": 2950, - "3787": 2951, - "3788": 2952, - "3789": 2953, - "3790": 2956, - "3791": 2956, - "3792": 2957, - "3793": 2958, - "3794": 2959, - "3795": 2959, - "3796": 2960, - "3797": 2961, - "3798": 2962, - "3799": 2963, - "3800": 2964, - "3801": 2965, - "3802": 2965, - "3803": 2965, - "3804": 2966, - "3805": 2967, - "3806": 2970, - "3807": 2970, - "3808": 2970, - "3809": 2974, - "3810": 2975, - "3811": 2976, - "3812": 2976, - "3813": 2976, - "3814": 2977, - "3815": 2978, - "3816": 2979, - "3817": 2979, - "3818": 2979, - "3819": 2980, - "3820": 2981, - "3821": 2982, - "3822": 2983, - "3823": 2984, - "3824": 2984, - "3825": 2988, - "3826": 2988, - "3827": 2989, - "3828": 2990, - "3829": 2991, - "3830": 2992, - "3831": 2993, - "3832": 2994, - "3833": 2995, - "3834": 2995, - "3835": 2995, - "3836": 2996, - "3837": 2997, - "3838": 2997, - "3839": 2997, - "3840": 2998, - "3841": 2999, - "3842": 2999, - "3843": 3000, - "3844": 3001, - "3845": 3001, - "3846": 3001, - "3847": 3002, - "3848": 3003, - "3849": 3003, - "3850": 3007, - "3851": 3007, - "3852": 3008, - "3853": 3009, - "3854": 3010, - "3855": 3011, - "3856": 3012, - "3857": 3015, - "3858": 3015, - "3859": 3016, - "3860": 3017, - "3861": 3018, - "3862": 3018, - "3863": 3019, - "3864": 3020, - "3865": 3021, - "3866": 3022, - "3867": 3023, - "3868": 3024, - "3869": 3024, - "3870": 3024, - "3871": 3025, - "3872": 3026, - "3873": 3029, - "3874": 3029, - "3875": 3029, - "3876": 3033, - "3877": 3034, - "3878": 3035, - "3879": 3035, - "3880": 3035, - "3881": 3036, - "3882": 3037, - "3883": 3038, - "3884": 3038, - "3885": 3038, - "3886": 3039, - "3887": 3040, - "3888": 3040, - "3889": 3041, - "3890": 3042, - "3891": 3042, - "3892": 3042, - "3893": 3043, - "3894": 3044, - "3895": 3044, - "3896": 3045, - "3897": 3046, - "3898": 3047, - "3899": 3047, - "3900": 3051, - "3901": 3051, - "3902": 3052, - "3903": 3053, - "3904": 3054, - "3905": 3055, - "3906": 3056, - "3907": 3057, - "3908": 3058, - "3909": 3058, - "3910": 3058, - "3911": 3059, - "3912": 3060, - "3913": 3060, - "3914": 3060, - "3915": 3061, - "3916": 3062, - "3917": 3063, - "3918": 3064, - "3919": 3065, - "3920": 3066, - "3921": 3067, - "3922": 3068, - "3923": 3069, - "3924": 3069, - "3925": 3073, - "3926": 3073, - "3927": 3074, - "3928": 3075, - "3929": 3076, - "3930": 3077, - "3931": 3078, - "3932": 3081, - "3933": 3081, - "3934": 3082, - "3935": 3083, - "3936": 3084, - "3937": 3084, - "3938": 3085, - "3939": 3086, - "3940": 3087, - "3941": 3088, - "3942": 3089, - "3943": 3090, - "3944": 3091, - "3945": 3091, - "3946": 3091, - "3947": 3092, - "3948": 3093, - "3949": 3096, - "3950": 3096, - "3951": 3096, - "3952": 3100, - "3953": 3101, - "3954": 3102, - "3955": 3102, - "3956": 3102, - "3957": 3103, - "3958": 3104, - "3959": 3105, - "3960": 3105, - "3961": 3105, - "3962": 3106, - "3963": 3107, - "3964": 3107, - "3965": 3108, - "3966": 3109, - "3967": 3109, - "3968": 3109, - "3969": 3110, - "3970": 3111, - "3971": 3111, - "3972": 3112, - "3973": 3113, - "3974": 3114, - "3975": 3114, - "3976": 3118, - "3977": 3118, - "3978": 3119, - "3979": 3120, - "3980": 3121, - "3981": 3122, - "3982": 3123, - "3983": 3124, - "3984": 3125, - "3985": 3125, - "3986": 3125, - "3987": 3126, - "3988": 3127, - "3989": 3127, - "3990": 3127, - "3991": 3128, - "3992": 3129, - "3993": 3130, - "3994": 3131, - "3995": 3132, - "3996": 3133, - "3997": 3134, - "3998": 3135, - "3999": 3136, - "4000": 3137, - "4001": 3138, - "4002": 3139, - "4003": 3139, - "4004": 3140, - "4005": 3140, - "4006": 3141, - "4007": 3142, - "4008": 3143, - "4009": 3143, - "4010": 3144, - "4011": 3144, - "4012": 3148, - "4013": 3148, - "4014": 3149, - "4015": 3149, - "4016": 3150, - "4017": 3151, - "4018": 3152, - "4019": 3153, - "4020": 3154, - "4021": 3155, - "4022": 3158, - "4023": 3158, - "4024": 3159, - "4025": 3160, - "4026": 3161, - "4027": 3161, - "4028": 3162, - "4029": 3163, - "4030": 3164, - "4031": 3165, - "4032": 3166, - "4033": 3167, - "4034": 3167, - "4035": 3167, - "4036": 3168, - "4037": 3169, - "4038": 3172, - "4039": 3172, - "4040": 3172, - "4041": 3176, - "4042": 3177, - "4043": 3178, - "4044": 3179, - "4045": 3180, - "4046": 3181, - "4047": 3181, - "4048": 3182, - "4049": 3183, - "4050": 3184, - "4051": 3184, - "4052": 3185, - "4053": 3186, - "4054": 3187, - "4055": 3187, - "4056": 3191, - "4057": 3191, - "4058": 3192, - "4059": 3193, - "4060": 3194, - "4061": 3195, - "4062": 3196, - "4063": 3197, - "4064": 3197, - "4065": 3197, - "4066": 3198, - "4067": 3199, - "4068": 3200, - "4069": 3201, - "4070": 3202, - "4071": 3203, - "4072": 3203, - "4073": 3204, - "4074": 3205, - "4075": 3206, - "4076": 3207, - "4077": 3208, - "4078": 3209, - "4079": 3209, - "4080": 3210, - "4081": 3210, - "4082": 3211, - "4083": 3212, - "4084": 3212, - "4085": 3213, - "4086": 3214, - "4087": 3214, - "4088": 3215, - "4089": 3216, - "4090": 3217, - "4091": 3217, - "4092": 3218, - "4093": 3218, - "4094": 3219, - "4095": 3220, - "4096": 3221, - "4097": 3222, - "4098": 3223, - "4099": 3224, - "4100": 3225, - "4101": 3226, - "4102": 3226, - "4103": 3230, - "4104": 3230, - "4105": 3231, - "4106": 3232, - "4107": 3233, - "4108": 3234, - "4109": 3235, - "4110": 3238, - "4111": 3238, - "4112": 3239, - "4113": 3240, - "4114": 3241, - "4115": 3241, - "4116": 3242, - "4117": 3243, - "4118": 3244, - "4119": 3245, - "4120": 3246, - "4121": 3247, - "4122": 3247, - "4123": 3248, - "4124": 3248, - "4125": 3248, - "4126": 3249, - "4127": 3250, - "4128": 3253, - "4129": 3253, - "4130": 3253, - "4131": 3257, - "4132": 3258, - "4133": 3259, - "4134": 3259, - "4135": 3259, - "4136": 3260, - "4137": 3261, - "4138": 3262, - "4139": 3262, - "4140": 3262, - "4141": 3263, - "4142": 3264, - "4143": 3264, - "4144": 3265, - "4145": 3266, - "4146": 3266, - "4147": 3266, - "4148": 3267, - "4149": 3268, - "4150": 3268, - "4151": 3269, - "4152": 3270, - "4153": 3270, - "4154": 3270, - "4155": 3271, - "4156": 3272, - "4157": 3272, - "4158": 3273, - "4159": 3274, - "4160": 3274, - "4161": 3274, - "4162": 3275, - "4163": 3276, - "4164": 3276, - "4165": 3277, - "4166": 3278, - "4167": 3278, - "4168": 3278, - "4169": 3279, - "4170": 3280, - "4171": 3280, - "4172": 3281, - "4173": 3282, - "4174": 3282, - "4175": 3282, - "4176": 3283, - "4177": 3284, - "4178": 3285, - "4179": 3286, - "4180": 3286, - "4181": 3286, - "4182": 3287, - "4183": 3288, - "4184": 3288, - "4185": 3289, - "4186": 3290, - "4187": 3290, - "4188": 3290, - "4189": 3291, - "4190": 3292, - "4191": 3292, - "4192": 3293, - "4193": 3294, - "4194": 3294, - "4195": 3294, - "4196": 3295, - "4197": 3296, - "4198": 3296, - "4199": 3297, - "4200": 3298, - "4201": 3299, - "4202": 3299, - "4203": 3303, - "4204": 3304, - "4205": 3304, - "4206": 3308, - "4207": 3308, - "4208": 3309, - "4209": 3309, - "4210": 3313, - "4211": 3313, - "4212": 3314, - "4213": 3315, - "4214": 3316, - "4215": 3316, - "4216": 3317, - "4217": 3318, - "4218": 3319, - "4219": 3319, - "4220": 3319, - "4221": 3320, - "4222": 3320, - "4223": 3321, - "4224": 3322, - "4225": 3323, - "4226": 3324, - "4227": 3325, - "4228": 3325, - "4229": 3326, - "4230": 3326, - "4231": 3327, - "4232": 3328, - "4233": 3329, - "4234": 3330, - "4235": 3331, - "4236": 3331, - "4237": 3332, - "4238": 3332, - "4239": 3333, - "4240": 3334, - "4241": 3334, - "4242": 3335, - "4243": 3336, - "4244": 3336, - "4245": 3337, - "4246": 3338, - "4247": 3339, - "4248": 3339, - "4249": 3340, - "4250": 3340, - "4251": 3341, - "4252": 3342, - "4253": 3343, - "4254": 3344, - "4255": 3345, - "4256": 3346, - "4257": 3347, - "4258": 3348, - "4259": 3348, - "4260": 3349, - "4261": 3350, - "4262": 3350, - "4263": 3350, - "4264": 3351, - "4265": 3351, - "4266": 3352, - "4267": 3352, - "4268": 3353, - "4269": 3353, - "4270": 3354, - "4271": 3355, - "4272": 3356, - "4273": 3357, - "4274": 3358, - "4275": 3359, - "4276": 3359, - "4277": 3360, - "4278": 3360, - "4279": 3364, - "4280": 3364, - "4281": 3365, - "4282": 3366, - "4283": 3367, - "4284": 3368, - "4285": 3369, - "4286": 3372, - "4287": 3372, - "4288": 3373, - "4289": 3374, - "4290": 3375, - "4291": 3375, - "4292": 3376, - "4293": 3377, - "4294": 3378, - "4295": 3379, - "4296": 3380, - "4297": 3381, - "4298": 3382, - "4299": 3382, - "4300": 3382, - "4301": 3383, - "4302": 3384, - "4303": 3387, - "4304": 3387, - "4305": 3387, - "4306": 3391, - "4307": 3392, - "4308": 3393, - "4309": 3393, - "4310": 3393, - "4311": 3394, - "4312": 3395, - "4313": 3396, - "4314": 3396, - "4315": 3396, - "4316": 3397, - "4317": 3398, - "4318": 3398, - "4319": 3399, - "4320": 3400, - "4321": 3400, - "4322": 3400, - "4323": 3401, - "4324": 3402, - "4325": 3402, - "4326": 3403, - "4327": 3404, - "4328": 3405, - "4329": 3405, - "4330": 3409, - "4331": 3409, - "4332": 3410, - "4333": 3411, - "4334": 3412, - "4335": 3413, - "4336": 3414, - "4337": 3415, - "4338": 3416, - "4339": 3417, - "4340": 3417, - "4341": 3418, - "4342": 3419, - "4343": 3420, - "4344": 3421, - "4345": 3422, - "4346": 3423, - "4347": 3424, - "4348": 3425, - "4349": 3426, - "4350": 3426, - "4351": 3427, - "4352": 3428, - "4353": 3429, - "4354": 3430, - "4355": 3431, - "4356": 3432, - "4357": 3433, - "4358": 3434, - "4359": 3435, - "4360": 3435, - "4361": 3436, - "4362": 3437, - "4363": 3438, - "4364": 3438, - "4365": 3442, - "4366": 3442, - "4367": 3443, - "4368": 3444, - "4369": 3445, - "4370": 3446, - "4371": 3447, - "4372": 3450, - "4373": 3450, - "4374": 3451, - "4375": 3452, - "4376": 3453, - "4377": 3453, - "4378": 3454, - "4379": 3455, - "4380": 3456, - "4381": 3457, - "4382": 3458, - "4383": 3459, - "4384": 3459, - "4385": 3459, - "4386": 3460, - "4387": 3461, - "4388": 3464, - "4389": 3464, - "4390": 3464, - "4391": 3468, - "4392": 3469, - "4393": 3470, - "4394": 3470, - "4395": 3470, - "4396": 3471, - "4397": 3472, - "4398": 3473, - "4399": 3473, - "4400": 3473, - "4401": 3474, - "4402": 3475, - "4403": 3475, - "4404": 3476, - "4405": 3477, - "4406": 3477, - "4407": 3477, - "4408": 3478, - "4409": 3479, - "4410": 3479, - "4411": 3480, - "4412": 3481, - "4413": 3482, - "4414": 3482, - "4415": 3486, - "4416": 3486, - "4417": 3487, - "4418": 3488, - "4419": 3489, - "4420": 3490, - "4421": 3491, - "4422": 3492, - "4423": 3492, - "4424": 3492, - "4425": 3493, - "4426": 3494, - "4427": 3495, - "4428": 3496, - "4429": 3497, - "4430": 3498, - "4431": 3498, - "4432": 3499, - "4433": 3500, - "4434": 3501, - "4435": 3502, - "4436": 3503, - "4437": 3504, - "4438": 3504, - "4439": 3505, - "4440": 3505, - "4441": 3506, - "4442": 3507, - "4443": 3507, - "4444": 3508, - "4445": 3509, - "4446": 3509, - "4447": 3510, - "4448": 3511, - "4449": 3512, - "4450": 3512, - "4451": 3513, - "4452": 3513, - "4453": 3514, - "4454": 3515, - "4455": 3516, - "4456": 3517, - "4457": 3518, - "4458": 3519, - "4459": 3520, - "4460": 3521, - "4461": 3521, - "4462": 3525, - "4463": 3525, - "4464": 3526, - "4465": 3527, - "4466": 3528, - "4467": 3529, - "4468": 3530, - "4469": 3533, - "4470": 3533, - "4471": 3534, - "4472": 3535, - "4473": 3536, - "4474": 3536, - "4475": 3537, - "4476": 3538, - "4477": 3539, - "4478": 3540, - "4479": 3541, - "4480": 3542, - "4481": 3543, - "4482": 3543, - "4483": 3543, - "4484": 3544, - "4485": 3545, - "4486": 3548, - "4487": 3548, - "4488": 3548, - "4489": 3552, - "4490": 3553, - "4491": 3554, - "4492": 3554, - "4493": 3554, - "4494": 3555, - "4495": 3556, - "4496": 3557, - "4497": 3557, - "4498": 3557, - "4499": 3558, - "4500": 3559, - "4501": 3559, - "4502": 3560, - "4503": 3561, - "4504": 3561, - "4505": 3561, - "4506": 3562, - "4507": 3563, - "4508": 3563, - "4509": 3564, - "4510": 3565, - "4511": 3566, - "4512": 3566, - "4513": 3570, - "4514": 3570, - "4515": 3571, - "4516": 3572, - "4517": 3573, - "4518": 3574, - "4519": 3575, - "4520": 3576, - "4521": 3576, - "4522": 3576, - "4523": 3577, - "4524": 3578, - "4525": 3579, - "4526": 3580, - "4527": 3581, - "4528": 3582, - "4529": 3582, - "4530": 3583, - "4531": 3584, - "4532": 3585, - "4533": 3586, - "4534": 3587, - "4535": 3588, - "4536": 3588, - "4537": 3589, - "4538": 3589, - "4539": 3590, - "4540": 3591, - "4541": 3591, - "4542": 3592, - "4543": 3593, - "4544": 3593, - "4545": 3594, - "4546": 3595, - "4547": 3596, - "4548": 3596, - "4549": 3597, - "4550": 3597, - "4551": 3598, - "4552": 3599, - "4553": 3600, - "4554": 3601, - "4555": 3602, - "4556": 3603, - "4557": 3604, - "4558": 3605, - "4559": 3606, - "4560": 3607, - "4561": 3607, - "4562": 3607, - "4563": 3608, - "4564": 3608, - "4565": 3609, - "4566": 3609, - "4567": 3610, - "4568": 3610, - "4569": 3611, - "4570": 3612, - "4571": 3613, - "4572": 3614, - "4573": 3615, - "4574": 3616, - "4575": 3616, - "4576": 3617, - "4577": 3617, - "4578": 3621, - "4579": 3621, - "4580": 3622, - "4581": 3623, - "4582": 3624, - "4583": 3625, - "4584": 3626, - "4585": 3629, - "4586": 3629, - "4587": 3630, - "4588": 3631, - "4589": 3632, - "4590": 3632, - "4591": 3633, - "4592": 3634, - "4593": 3635, - "4594": 3636, - "4595": 3637, - "4596": 3638, - "4597": 3638, - "4598": 3638, - "4599": 3639, - "4600": 3640, - "4601": 3643, - "4602": 3643, - "4603": 3643, - "4604": 3647, - "4605": 3648, - "4606": 3649, - "4607": 3649, - "4608": 3649, - "4609": 3650, - "4610": 3651, - "4611": 3652, - "4612": 3652, - "4613": 3652, - "4614": 3653, - "4615": 3654, - "4616": 3654, - "4617": 3655, - "4618": 3656, - "4619": 3656, - "4620": 3656, - "4621": 3657, - "4622": 3658, - "4623": 3658, - "4624": 3659, - "4625": 3660, - "4626": 3661, - "4627": 3661, - "4628": 3665, - "4629": 3665, - "4630": 3666, - "4631": 3667, - "4632": 3668, - "4633": 3669, - "4634": 3670, - "4635": 3671, - "4636": 3671, - "4637": 3671, - "4638": 3672, - "4639": 3673, - "4640": 3674, - "4641": 3675, - "4642": 3676, - "4643": 3677, - "4644": 3677, - "4645": 3678, - "4646": 3679, - "4647": 3680, - "4648": 3681, - "4649": 3682, - "4650": 3683, - "4651": 3683, - "4652": 3684, - "4653": 3684, - "4654": 3685, - "4655": 3686, - "4656": 3686, - "4657": 3687, - "4658": 3688, - "4659": 3688, - "4660": 3689, - "4661": 3690, - "4662": 3691, - "4663": 3691, - "4664": 3692, - "4665": 3692, - "4666": 3693, - "4667": 3694, - "4668": 3695, - "4669": 3696, - "4670": 3697, - "4671": 3698, - "4672": 3699, - "4673": 3700, - "4674": 3700, - "4675": 3704, - "4676": 3704, - "4677": 3705, - "4678": 3706, - "4679": 3707, - "4680": 3708, - "4681": 3709, - "4682": 3712, - "4683": 3712, - "4684": 3713, - "4685": 3714, - "4686": 3715, - "4687": 3715, - "4688": 3716, - "4689": 3717, - "4690": 3718, - "4691": 3719, - "4692": 3720, - "4693": 3721, - "4694": 3722, - "4695": 3722, - "4696": 3722, - "4697": 3723, - "4698": 3724, - "4699": 3727, - "4700": 3727, - "4701": 3727, - "4702": 3731, - "4703": 3732, - "4704": 3733, - "4705": 3733, - "4706": 3733, - "4707": 3734, - "4708": 3735, - "4709": 3736, - "4710": 3736, - "4711": 3736, - "4712": 3737, - "4713": 3738, - "4714": 3738, - "4715": 3739, - "4716": 3740, - "4717": 3740, - "4718": 3740, - "4719": 3741, - "4720": 3742, - "4721": 3742, - "4722": 3743, - "4723": 3744, - "4724": 3745, - "4725": 3745, - "4726": 3749, - "4727": 3749, - "4728": 3750, - "4729": 3751, - "4730": 3752, - "4731": 3753, - "4732": 3754, - "4733": 3755, - "4734": 3755, - "4735": 3755, - "4736": 3756, - "4737": 3757, - "4738": 3758, - "4739": 3759, - "4740": 3760, - "4741": 3761, - "4742": 3761, - "4743": 3762, - "4744": 3763, - "4745": 3764, - "4746": 3765, - "4747": 3766, - "4748": 3767, - "4749": 3767, - "4750": 3768, - "4751": 3768, - "4752": 3769, - "4753": 3770, - "4754": 3770, - "4755": 3771, - "4756": 3772, - "4757": 3772, - "4758": 3773, - "4759": 3774, - "4760": 3775, - "4761": 3775, - "4762": 3776, - "4763": 3776, - "4764": 3777, - "4765": 3778, - "4766": 3779, - "4767": 3780, - "4768": 3781, - "4769": 3782, - "4770": 3783, - "4771": 3784, - "4772": 3785, - "4773": 3786, - "4774": 3786, - "4775": 3786, - "4776": 3787, - "4777": 3787, - "4778": 3788, - "4779": 3788, - "4780": 3789, - "4781": 3789, - "4782": 3790, - "4783": 3791, - "4784": 3792, - "4785": 3793, - "4786": 3794, - "4787": 3795, - "4788": 3795, - "4789": 3796, - "4790": 3796, - "4791": 3800, - "4792": 3800, - "4793": 3801, - "4794": 3802, - "4795": 3803, - "4796": 3804, - "4797": 3805, - "4798": 3808, - "4799": 3808, - "4800": 3809, - "4801": 3810, - "4802": 3811, - "4803": 3811, - "4804": 3812, - "4805": 3813, - "4806": 3814, - "4807": 3815, - "4808": 3816, - "4809": 3816, - "4810": 3816, - "4811": 3817, - "4812": 3818, - "4813": 3821, - "4814": 3821, - "4815": 3821, - "4816": 3825, - "4817": 3825, - "4818": 3826, - "4819": 3827, - "4820": 3828, - "4821": 3829, - "4822": 3829, - "4823": 3829, - "4824": 3830, - "4825": 3831, - "4826": 3832, - "4827": 3833, - "4828": 3834, - "4829": 3835, - "4830": 3836, - "4831": 3839, - "4832": 3839, - "4833": 3840, - "4834": 3841, - "4835": 3842, - "4836": 3842, - "4837": 3843, - "4838": 3844, - "4839": 3845, - "4840": 3846, - "4841": 3847, - "4842": 3847, - "4843": 3847, - "4844": 3848, - "4845": 3848, - "4846": 3848, - "4847": 3849, - "4848": 3849, - "4849": 3849, - "4850": 3850, - "4851": 3851, - "4852": 3854, - "4853": 3854, - "4854": 3854, - "4855": 3858, - "4856": 3858, - "4857": 3859, - "4858": 3859, - "4859": 3860, - "4860": 3861, - "4861": 3862, - "4862": 3865, - "4863": 3865, - "4864": 3866, - "4865": 3867, - "4866": 3868, - "4867": 3868, - "4868": 3869, - "4869": 3870, - "4870": 3871, - "4871": 3872, - "4872": 3873, - "4873": 3874, - "4874": 3874, - "4875": 3874, - "4876": 3875, - "4877": 3876, - "4878": 3879, - "4879": 3879, - "4880": 3879, - "4881": 3883, - "4882": 3884, - "4883": 3885, - "4884": 3885, - "4885": 3886, - "4886": 3886, - "4887": 3887, - "4888": 3887, - "4889": 3888, - "4890": 3888, - "4891": 3889, - "4892": 3889, - "4893": 3890, - "4894": 3891, - "4895": 3892, - "4896": 3892, - "4897": 3892, - "4898": 3893, - "4899": 3894, - "4900": 3894, - "4901": 3895, - "4902": 3895, - "4903": 3896, - "4904": 3896, - "4905": 3897, - "4906": 3898, - "4907": 3898, - "4908": 3899, - "4909": 3900, - "4910": 3901, - "4911": 3901, - "4912": 3901, - "4913": 3902, - "4914": 3903, - "4915": 3904, - "4916": 3905, - "4917": 3906, - "4918": 3907, - "4919": 3907, - "4920": 3908, - "4921": 3909, - "4922": 3910, - "4923": 3911, - "4924": 3911, - "4925": 3911, - "4926": 3912, - "4927": 3912, - "4928": 3913, - "4929": 3913, - "4930": 3914, - "4931": 3915, - "4932": 3916, - "4933": 3916, - "4934": 3917, - "4935": 3917, - "4936": 3918, - "4937": 3918, - "4938": 3919, - "4939": 3920, - "4940": 3920, - "4941": 3921, - "4942": 3921, - "4943": 3922, - "4944": 3923, - "4945": 3924, - "4946": 3925, - "4947": 3925, - "4948": 3925, - "4949": 3926, - "4950": 3927, - "4951": 3928, - "4952": 3929, - "4953": 3930, - "4954": 3930, - "4955": 3931, - "4956": 3932, - "4957": 3933, - "4958": 3934, - "4959": 3934, - "4960": 3934, - "4961": 3935, - "4962": 3935, - "4963": 3936, - "4964": 3936, - "4965": 3937, - "4966": 3938, - "4967": 3939, - "4968": 3939, - "4969": 3940, - "4970": 3940, - "4971": 3941, - "4972": 3941, - "4973": 3942, - "4974": 3943, - "4975": 3943, - "4976": 3944, - "4977": 3944, - "4978": 3945, - "4979": 3946, - "4980": 3946, - "4981": 3946, - "4982": 3947, - "4983": 3948, - "4984": 3949, - "4985": 3950, - "4986": 3951, - "4987": 3952, - "4988": 3952, - "4989": 3953, - "4990": 3954, - "4991": 3955, - "4992": 3956, - "4993": 3956, - "4994": 3956, - "4995": 3957, - "4996": 3957, - "4997": 3958, - "4998": 3958, - "4999": 3959, - "5000": 3960, - "5001": 3961, - "5002": 3961, - "5003": 3962, - "5004": 3962, - "5005": 3963, - "5006": 3963, - "5007": 3964, - "5008": 3965, - "5009": 3965, - "5010": 3969, - "5011": 3969, - "5012": 3970, - "5013": 3971, - "5014": 3972, - "5015": 3973, - "5016": 3974, - "5017": 3977, - "5018": 3977, - "5019": 3978, - "5020": 3979, - "5021": 3980, - "5022": 3980, - "5023": 3981, - "5024": 3982, - "5025": 3983, - "5026": 3984, - "5027": 3985, - "5028": 3986, - "5029": 3986, - "5030": 3986, - "5031": 3987, - "5032": 3988, - "5033": 3991, - "5034": 3991, - "5035": 3991, - "5036": 3995, - "5037": 3996, - "5038": 3997, - "5039": 3997, - "5040": 3998, - "5041": 3998, - "5042": 3999, - "5043": 3999, - "5044": 4000, - "5045": 4000, - "5046": 4001, - "5047": 4001, - "5048": 4002, - "5049": 4003, - "5050": 4004, - "5051": 4004, - "5052": 4004, - "5053": 4005, - "5054": 4006, - "5055": 4006, - "5056": 4007, - "5057": 4007, - "5058": 4008, - "5059": 4008, - "5060": 4009, - "5061": 4010, - "5062": 4010, - "5063": 4011, - "5064": 4012, - "5065": 4013, - "5066": 4013, - "5067": 4013, - "5068": 4014, - "5069": 4015, - "5070": 4016, - "5071": 4017, - "5072": 4018, - "5073": 4019, - "5074": 4019, - "5075": 4020, - "5076": 4021, - "5077": 4022, - "5078": 4023, - "5079": 4023, - "5080": 4023, - "5081": 4024, - "5082": 4024, - "5083": 4025, - "5084": 4025, - "5085": 4026, - "5086": 4027, - "5087": 4028, - "5088": 4028, - "5089": 4029, - "5090": 4029, - "5091": 4030, - "5092": 4030, - "5093": 4031, - "5094": 4032, - "5095": 4032, - "5096": 4033, - "5097": 4033, - "5098": 4034, - "5099": 4035, - "5100": 4036, - "5101": 4037, - "5102": 4037, - "5103": 4037, - "5104": 4038, - "5105": 4039, - "5106": 4040, - "5107": 4041, - "5108": 4042, - "5109": 4042, - "5110": 4043, - "5111": 4044, - "5112": 4045, - "5113": 4046, - "5114": 4046, - "5115": 4046, - "5116": 4047, - "5117": 4047, - "5118": 4048, - "5119": 4048, - "5120": 4049, - "5121": 4050, - "5122": 4051, - "5123": 4051, - "5124": 4052, - "5125": 4052, - "5126": 4053, - "5127": 4053, - "5128": 4054, - "5129": 4055, - "5130": 4055, - "5131": 4056, - "5132": 4056, - "5133": 4057, - "5134": 4058, - "5135": 4058, - "5136": 4058, - "5137": 4059, - "5138": 4060, - "5139": 4061, - "5140": 4062, - "5141": 4063, - "5142": 4064, - "5143": 4064, - "5144": 4065, - "5145": 4066, - "5146": 4067, - "5147": 4068, - "5148": 4068, - "5149": 4068, - "5150": 4069, - "5151": 4069, - "5152": 4070, - "5153": 4070, - "5154": 4071, - "5155": 4072, - "5156": 4073, - "5157": 4073, - "5158": 4074, - "5159": 4074, - "5160": 4075, - "5161": 4075, - "5162": 4076, - "5163": 4077, - "5164": 4077, - "5165": 4081, - "5166": 4081, - "5167": 4082, - "5168": 4083, - "5169": 4083, - "5170": 4084, - "5171": 4084, - "5172": 4085, - "5173": 4086, - "5174": 4086, - "5175": 4087, - "5176": 4087, - "5177": 4088, - "5178": 4089, - "5179": 4090, - "5180": 4091, - "5181": 4092, - "5182": 4092, - "5183": 4093, - "5184": 4094, - "5185": 4095, - "5186": 4096, - "5187": 4097, - "5188": 4098, - "5189": 4099, - "5190": 4100, - "5191": 4101, - "5192": 4101, - "5193": 4101, - "5194": 4102, - "5195": 4102, - "5196": 4103, - "5197": 4104, - "5198": 4108, - "5199": 4108, - "5200": 4109, - "5201": 4110, - "5202": 4110, - "5203": 4111, - "5204": 4111, - "5205": 4112, - "5206": 4113, - "5207": 4113, - "5208": 4114, - "5209": 4114, - "5210": 4115, - "5211": 4116, - "5212": 4117, - "5213": 4118, - "5214": 4119, - "5215": 4119, - "5216": 4120, - "5217": 4121, - "5218": 4122, - "5219": 4123, - "5220": 4124, - "5221": 4125, - "5222": 4126, - "5223": 4127, - "5224": 4128, - "5225": 4128, - "5226": 4128, - "5227": 4129, - "5228": 4130, - "5229": 4131, - "5230": 4132, - "5231": 4132, - "5232": 4132, - "5233": 4133, - "5234": 4134, - "5235": 4135, - "5236": 4136, - "5237": 4137, - "5238": 4138, - "5239": 4139, - "5240": 4142, - "5241": 4142, - "5242": 4143, - "5243": 4144, - "5244": 4145, - "5245": 4145, - "5246": 4146, - "5247": 4147, - "5248": 4148, - "5249": 4149, - "5250": 4150, - "5251": 4151, - "5252": 4151, - "5253": 4151, - "5254": 4152, - "5255": 4153, - "5256": 4156, - "5257": 4156, - "5258": 4156, - "5259": 4160, - "5260": 4161, - "5261": 4162, - "5262": 4162, - "5263": 4163, - "5264": 4163, - "5265": 4164, - "5266": 4164, - "5267": 4165, - "5268": 4165, - "5269": 4166, - "5270": 4166, - "5271": 4167, - "5272": 4167, - "5273": 4168, - "5274": 4169, - "5275": 4169, - "5276": 4169, - "5277": 4170, - "5278": 4171, - "5279": 4171, - "5280": 4172, - "5281": 4172, - "5282": 4173, - "5283": 4173, - "5284": 4174, - "5285": 4175, - "5286": 4175, - "5287": 4176, - "5288": 4177, - "5289": 4178, - "5290": 4178, - "5291": 4178, - "5292": 4179, - "5293": 4180, - "5294": 4181, - "5295": 4182, - "5296": 4183, - "5297": 4184, - "5298": 4184, - "5299": 4185, - "5300": 4186, - "5301": 4187, - "5302": 4188, - "5303": 4188, - "5304": 4188, - "5305": 4189, - "5306": 4189, - "5307": 4190, - "5308": 4190, - "5309": 4191, - "5310": 4192, - "5311": 4193, - "5312": 4193, - "5313": 4194, - "5314": 4194, - "5315": 4195, - "5316": 4195, - "5317": 4196, - "5318": 4197, - "5319": 4197, - "5320": 4198, - "5321": 4198, - "5322": 4199, - "5323": 4200, - "5324": 4201, - "5325": 4202, - "5326": 4202, - "5327": 4202, - "5328": 4203, - "5329": 4204, - "5330": 4205, - "5331": 4206, - "5332": 4207, - "5333": 4207, - "5334": 4208, - "5335": 4209, - "5336": 4210, - "5337": 4211, - "5338": 4211, - "5339": 4211, - "5340": 4212, - "5341": 4212, - "5342": 4213, - "5343": 4213, - "5344": 4214, - "5345": 4215, - "5346": 4216, - "5347": 4216, - "5348": 4217, - "5349": 4217, - "5350": 4218, - "5351": 4218, - "5352": 4219, - "5353": 4220, - "5354": 4220, - "5355": 4221, - "5356": 4221, - "5357": 4222, - "5358": 4223, - "5359": 4223, - "5360": 4223, - "5361": 4224, - "5362": 4225, - "5363": 4226, - "5364": 4227, - "5365": 4228, - "5366": 4229, - "5367": 4229, - "5368": 4230, - "5369": 4231, - "5370": 4232, - "5371": 4233, - "5372": 4233, - "5373": 4233, - "5374": 4234, - "5375": 4234, - "5376": 4235, - "5377": 4235, - "5378": 4236, - "5379": 4237, - "5380": 4238, - "5381": 4238, - "5382": 4239, - "5383": 4239, - "5384": 4240, - "5385": 4240, - "5386": 4241, - "5387": 4242, - "5388": 4242, - "5389": 4243, - "5390": 4243, - "5391": 4244, - "5392": 4245, - "5393": 4245, - "5394": 4245, - "5395": 4246, - "5396": 4247, - "5397": 4248, - "5398": 4249, - "5399": 4250, - "5400": 4251, - "5401": 4251, - "5402": 4252, - "5403": 4253, - "5404": 4254, - "5405": 4255, - "5406": 4255, - "5407": 4255, - "5408": 4256, - "5409": 4256, - "5410": 4257, - "5411": 4257, - "5412": 4258, - "5413": 4259, - "5414": 4260, - "5415": 4260, - "5416": 4261, - "5417": 4261, - "5418": 4262, - "5419": 4262, - "5420": 4263, - "5421": 4264, - "5422": 4264, - "5423": 4268, - "5424": 4268, - "5425": 4269, - "5426": 4270, - "5427": 4270, - "5428": 4271, - "5429": 4272, - "5430": 4272, - "5431": 4273, - "5432": 4274, - "5433": 4274, - "5434": 4274, - "5435": 4275, - "5436": 4276, - "5437": 4276, - "5438": 4280, - "5439": 4280, - "5440": 4281, - "5441": 4282, - "5442": 4282, - "5443": 4283, - "5444": 4284, - "5445": 4285, - "5446": 4285, - "5447": 4286, - "5448": 4286, - "5449": 4287, - "5450": 4288, - "5451": 4289, - "5452": 4290, - "5453": 4291, - "5454": 4291, - "5455": 4292, - "5456": 4293, - "5457": 4294, - "5458": 4295, - "5459": 4296, - "5460": 4297, - "5461": 4298, - "5462": 4299, - "5463": 4300, - "5464": 4300, - "5465": 4301, - "5466": 4301, - "5467": 4302, - "5468": 4303, - "5469": 4303, - "5470": 4304, - "5471": 4305, - "5472": 4305, - "5473": 4305, - "5474": 4306, - "5475": 4306, - "5476": 4307, - "5477": 4308, - "5478": 4308, - "5479": 4308, - "5480": 4309, - "5481": 4310, - "5482": 4311, - "5483": 4312, - "5484": 4313, - "5485": 4314, - "5486": 4314, - "5487": 4314, - "5488": 4315, - "5489": 4316, - "5490": 4316, - "5491": 4317, - "5492": 4317, - "5493": 4317, - "5494": 4318, - "5495": 4319, - "5496": 4319, - "5497": 4320, - "5498": 4320, - "5499": 4320, - "5500": 4321, - "5501": 4322, - "5502": 4322, - "5503": 4323, - "5504": 4323, - "5505": 4323, - "5506": 4324, - "5507": 4325, - "5508": 4325, - "5509": 4326, - "5510": 4326, - "5511": 4330, - "5512": 4330, - "5513": 4331, - "5514": 4332, - "5515": 4332, - "5516": 4333, - "5517": 4333, - "5518": 4334, - "5519": 4335, - "5520": 4335, - "5521": 4336, - "5522": 4336, - "5523": 4337, - "5524": 4338, - "5525": 4339, - "5526": 4340, - "5527": 4341, - "5528": 4341, - "5529": 4342, - "5530": 4343, - "5531": 4344, - "5532": 4345, - "5533": 4346, - "5534": 4347, - "5535": 4348, - "5536": 4349, - "5537": 4350, - "5538": 4350, - "5539": 4351, - "5540": 4351, - "5541": 4352, - "5542": 4353, - "5543": 4353, - "5544": 4354, - "5545": 4355, - "5546": 4356, - "5547": 4357, - "5548": 4357, - "5549": 4357, - "5550": 4358, - "5551": 4359, - "5552": 4360, - "5553": 4360, - "5554": 4361, - "5555": 4361, - "5556": 4361, - "5557": 4362, - "5558": 4363, - "5559": 4363, - "5560": 4364, - "5561": 4364, - "5562": 4364, - "5563": 4365, - "5564": 4366, - "5565": 4366, - "5566": 4367, - "5567": 4367, - "5568": 4367, - "5569": 4368, - "5570": 4369, - "5571": 4369, - "5572": 4370, - "5573": 4370, - "5574": 4374, - "5575": 4374, - "5576": 4375, - "5577": 4376, - "5578": 4376, - "5579": 4377, - "5580": 4377, - "5581": 4378, - "5582": 4379, - "5583": 4379, - "5584": 4380, - "5585": 4380, - "5586": 4381, - "5587": 4382, - "5588": 4383, - "5589": 4384, - "5590": 4385, - "5591": 4385, - "5592": 4386, - "5593": 4387, - "5594": 4388, - "5595": 4389, - "5596": 4390, - "5597": 4391, - "5598": 4392, - "5599": 4393, - "5600": 4394, - "5601": 4394, - "5602": 4395, - "5603": 4395, - "5604": 4396, - "5605": 4397, - "5606": 4397, - "5607": 4398, - "5608": 4399, - "5609": 4399, - "5610": 4399, - "5611": 4400, - "5612": 4400, - "5613": 4401, - "5614": 4402, - "5615": 4402, - "5616": 4402, - "5617": 4403, - "5618": 4404, - "5619": 4405, - "5620": 4406, - "5621": 4407, - "5622": 4407, - "5623": 4408, - "5624": 4408, - "5625": 4408, - "5626": 4409, - "5627": 4410, - "5628": 4410, - "5629": 4411, - "5630": 4411, - "5631": 4411, - "5632": 4412, - "5633": 4413, - "5634": 4413, - "5635": 4414, - "5636": 4414, - "5637": 4418, - "5638": 4418, - "5639": 4419, - "5640": 4420, - "5641": 4420, - "5642": 4421, - "5643": 4421, - "5644": 4422, - "5645": 4423, - "5646": 4423, - "5647": 4424, - "5648": 4424, - "5649": 4425, - "5650": 4426, - "5651": 4427, - "5652": 4428, - "5653": 4429, - "5654": 4429, - "5655": 4430, - "5656": 4431, - "5657": 4432, - "5658": 4433, - "5659": 4434, - "5660": 4435, - "5661": 4436, - "5662": 4437, - "5663": 4438, - "5664": 4438, - "5665": 4439, - "5666": 4439, - "5667": 4440, - "5668": 4441, - "5669": 4441, - "5670": 4442, - "5671": 4443, - "5672": 4443, - "5673": 4443, - "5674": 4444, - "5675": 4444, - "5676": 4445, - "5677": 4446, - "5678": 4446, - "5679": 4446, - "5680": 4447, - "5681": 4448, - "5682": 4449, - "5683": 4450, - "5684": 4451, - "5685": 4451, - "5686": 4452, - "5687": 4452, - "5688": 4452, - "5689": 4453, - "5690": 4454, - "5691": 4454, - "5692": 4455, - "5693": 4455, - "5694": 4459, - "5695": 4459, - "5696": 4460, - "5697": 4461, - "5698": 4462, - "5699": 4463, - "5700": 4464, - "5701": 4467, - "5702": 4467, - "5703": 4468, - "5704": 4469, - "5705": 4470, - "5706": 4470, - "5707": 4471, - "5708": 4472, - "5709": 4473, - "5710": 4474, - "5711": 4475, - "5712": 4476, - "5713": 4476, - "5714": 4476, - "5715": 4477, - "5716": 4478, - "5717": 4481, - "5718": 4481, - "5719": 4481, - "5720": 4485, - "5721": 4486, - "5722": 4487, - "5723": 4487, - "5724": 4488, - "5725": 4488, - "5726": 4489, - "5727": 4489, - "5728": 4490, - "5729": 4490, - "5730": 4491, - "5731": 4491, - "5732": 4492, - "5733": 4492, - "5734": 4493, - "5735": 4494, - "5736": 4494, - "5737": 4495, - "5738": 4496, - "5739": 4497, - "5740": 4497, - "5741": 4497, - "5742": 4498, - "5743": 4499, - "5744": 4500, - "5745": 4501, - "5746": 4502, - "5747": 4503, - "5748": 4503, - "5749": 4504, - "5750": 4505, - "5751": 4506, - "5752": 4507, - "5753": 4507, - "5754": 4507, - "5755": 4508, - "5756": 4508, - "5757": 4509, - "5758": 4509, - "5759": 4510, - "5760": 4511, - "5761": 4512, - "5762": 4512, - "5763": 4513, - "5764": 4513, - "5765": 4514, - "5766": 4514, - "5767": 4515, - "5768": 4516, - "5769": 4516, - "5770": 4517, - "5771": 4518, - "5772": 4519, - "5773": 4519, - "5774": 4519, - "5775": 4520, - "5776": 4521, - "5777": 4522, - "5778": 4523, - "5779": 4524, - "5780": 4525, - "5781": 4525, - "5782": 4526, - "5783": 4527, - "5784": 4528, - "5785": 4529, - "5786": 4529, - "5787": 4529, - "5788": 4530, - "5789": 4530, - "5790": 4531, - "5791": 4531, - "5792": 4532, - "5793": 4533, - "5794": 4534, - "5795": 4534, - "5796": 4535, - "5797": 4535, - "5798": 4536, - "5799": 4536, - "5800": 4537, - "5801": 4538, - "5802": 4538, - "5803": 4539, - "5804": 4539, - "5805": 4540, - "5806": 4541, - "5807": 4541, - "5808": 4541, - "5809": 4542, - "5810": 4543, - "5811": 4544, - "5812": 4545, - "5813": 4546, - "5814": 4547, - "5815": 4547, - "5816": 4548, - "5817": 4549, - "5818": 4550, - "5819": 4551, - "5820": 4551, - "5821": 4551, - "5822": 4552, - "5823": 4552, - "5824": 4553, - "5825": 4553, - "5826": 4554, - "5827": 4555, - "5828": 4556, - "5829": 4556, - "5830": 4557, - "5831": 4557, - "5832": 4558, - "5833": 4558, - "5834": 4559, - "5835": 4560, - "5836": 4560, - "5837": 4564, - "5838": 4564, - "5839": 4565, - "5840": 4566, - "5841": 4566, - "5842": 4567, - "5843": 4568, - "5844": 4569, - "5845": 4569, - "5846": 4570, - "5847": 4570, - "5848": 4571, - "5849": 4572, - "5850": 4573, - "5851": 4574, - "5852": 4575, - "5853": 4575, - "5854": 4576, - "5855": 4577, - "5856": 4578, - "5857": 4579, - "5858": 4580, - "5859": 4581, - "5860": 4582, - "5861": 4583, - "5862": 4584, - "5863": 4584, - "5864": 4585, - "5865": 4585, - "5866": 4586, - "5867": 4587, - "5868": 4587, - "5869": 4588, - "5870": 4589, - "5871": 4589, - "5872": 4589, - "5873": 4590, - "5874": 4590, - "5875": 4591, - "5876": 4592, - "5877": 4592, - "5878": 4592, - "5879": 4593, - "5880": 4594, - "5881": 4595, - "5882": 4596, - "5883": 4597, - "5884": 4598, - "5885": 4598, - "5886": 4598, - "5887": 4599, - "5888": 4600, - "5889": 4601, - "5890": 4601, - "5891": 4601, - "5892": 4602, - "5893": 4603, - "5894": 4603, - "5895": 4604, - "5896": 4604, - "5897": 4604, - "5898": 4605, - "5899": 4606, - "5900": 4606, - "5901": 4607, - "5902": 4607, - "5903": 4611, - "5904": 4611, - "5905": 4612, - "5906": 4613, - "5907": 4613, - "5908": 4614, - "5909": 4615, - "5910": 4616, - "5911": 4616, - "5912": 4617, - "5913": 4617, - "5914": 4618, - "5915": 4619, - "5916": 4620, - "5917": 4621, - "5918": 4622, - "5919": 4622, - "5920": 4623, - "5921": 4624, - "5922": 4625, - "5923": 4626, - "5924": 4627, - "5925": 4628, - "5926": 4629, - "5927": 4630, - "5928": 4631, - "5929": 4631, - "5930": 4632, - "5931": 4632, - "5932": 4633, - "5933": 4634, - "5934": 4634, - "5935": 4635, - "5936": 4636, - "5937": 4636, - "5938": 4636, - "5939": 4637, - "5940": 4637, - "5941": 4638, - "5942": 4639, - "5943": 4639, - "5944": 4639, - "5945": 4640, - "5946": 4641, - "5947": 4642, - "5948": 4643, - "5949": 4644, - "5950": 4645, - "5951": 4645, - "5952": 4645, - "5953": 4646, - "5954": 4647, - "5955": 4647, - "5956": 4648, - "5957": 4648, - "5958": 4648, - "5959": 4649, - "5960": 4650, - "5961": 4650, - "5962": 4651, - "5963": 4651, - "5964": 4655, - "5965": 4655, - "5966": 4656, - "5967": 4657, - "5968": 4657, - "5969": 4658, - "5970": 4658, - "5971": 4659, - "5972": 4660, - "5973": 4660, - "5974": 4661, - "5975": 4661, - "5976": 4662, - "5977": 4663, - "5978": 4664, - "5979": 4665, - "5980": 4666, - "5981": 4666, - "5982": 4667, - "5983": 4668, - "5984": 4669, - "5985": 4670, - "5986": 4671, - "5987": 4672, - "5988": 4673, - "5989": 4674, - "5990": 4675, - "5991": 4675, - "5992": 4676, - "5993": 4676, - "5994": 4677, - "5995": 4678, - "5996": 4679, - "5997": 4680, - "5998": 4680, - "5999": 4680, - "6000": 4681, - "6001": 4681, - "6002": 4682, - "6003": 4683, - "6004": 4683, - "6005": 4683, - "6006": 4684, - "6007": 4685, - "6008": 4686, - "6009": 4687, - "6010": 4688, - "6011": 4688, - "6012": 4689, - "6013": 4689, - "6014": 4689, - "6015": 4690, - "6016": 4691, - "6017": 4691, - "6018": 4692, - "6019": 4692, - "6020": 4696, - "6021": 4696, - "6022": 4697, - "6023": 4698, - "6024": 4699, - "6025": 4700, - "6026": 4701, - "6027": 4704, - "6028": 4704, - "6029": 4705, - "6030": 4706, - "6031": 4707, - "6032": 4707, - "6033": 4708, - "6034": 4709, - "6035": 4710, - "6036": 4711, - "6037": 4712, - "6038": 4713, - "6039": 4713, - "6040": 4713, - "6041": 4714, - "6042": 4715, - "6043": 4718, - "6044": 4718, - "6045": 4718, - "6046": 4722, - "6047": 4723, - "6048": 4724, - "6049": 4724, - "6050": 4725, - "6051": 4725, - "6052": 4726, - "6053": 4726, - "6054": 4727, - "6055": 4727, - "6056": 4728, - "6057": 4728, - "6058": 4729, - "6059": 4729, - "6060": 4730, - "6061": 4731, - "6062": 4731, - "6063": 4732, - "6064": 4733, - "6065": 4734, - "6066": 4734, - "6067": 4734, - "6068": 4735, - "6069": 4736, - "6070": 4737, - "6071": 4737, - "6072": 4737, - "6073": 4738, - "6074": 4739, - "6075": 4740, - "6076": 4741, - "6077": 4742, - "6078": 4743, - "6079": 4744, - "6080": 4744, - "6081": 4745, - "6082": 4746, - "6083": 4747, - "6084": 4748, - "6085": 4748, - "6086": 4748, - "6087": 4749, - "6088": 4749, - "6089": 4750, - "6090": 4750, - "6091": 4751, - "6092": 4752, - "6093": 4753, - "6094": 4753, - "6095": 4754, - "6096": 4754, - "6097": 4755, - "6098": 4755, - "6099": 4756, - "6100": 4757, - "6101": 4757, - "6102": 4758, - "6103": 4759, - "6104": 4760, - "6105": 4760, - "6106": 4760, - "6107": 4761, - "6108": 4761, - "6109": 4762, - "6110": 4763, - "6111": 4763, - "6112": 4763, - "6113": 4764, - "6114": 4765, - "6115": 4766, - "6116": 4767, - "6117": 4768, - "6118": 4769, - "6119": 4770, - "6120": 4770, - "6121": 4771, - "6122": 4772, - "6123": 4773, - "6124": 4774, - "6125": 4774, - "6126": 4774, - "6127": 4775, - "6128": 4775, - "6129": 4776, - "6130": 4776, - "6131": 4777, - "6132": 4778, - "6133": 4779, - "6134": 4779, - "6135": 4780, - "6136": 4780, - "6137": 4781, - "6138": 4781, - "6139": 4782, - "6140": 4783, - "6141": 4783, - "6142": 4784, - "6143": 4784, - "6144": 4785, - "6145": 4786, - "6146": 4786, - "6147": 4786, - "6148": 4787, - "6149": 4787, - "6150": 4788, - "6151": 4789, - "6152": 4789, - "6153": 4789, - "6154": 4790, - "6155": 4791, - "6156": 4792, - "6157": 4793, - "6158": 4794, - "6159": 4795, - "6160": 4796, - "6161": 4796, - "6162": 4797, - "6163": 4798, - "6164": 4799, - "6165": 4800, - "6166": 4800, - "6167": 4800, - "6168": 4801, - "6169": 4801, - "6170": 4802, - "6171": 4802, - "6172": 4803, - "6173": 4804, - "6174": 4805, - "6175": 4805, - "6176": 4806, - "6177": 4806, - "6178": 4807, - "6179": 4807, - "6180": 4808, - "6181": 4809, - "6182": 4809, - "6183": 4813, - "6184": 4813, - "6185": 4814, - "6186": 4815, - "6187": 4815, - "6188": 4816, - "6189": 4817, - "6190": 4818, - "6191": 4818, - "6192": 4819, - "6193": 4819, - "6194": 4820, - "6195": 4821, - "6196": 4822, - "6197": 4823, - "6198": 4824, - "6199": 4824, - "6200": 4825, - "6201": 4826, - "6202": 4827, - "6203": 4828, - "6204": 4829, - "6205": 4830, - "6206": 4831, - "6207": 4832, - "6208": 4833, - "6209": 4833, - "6210": 4834, - "6211": 4834, - "6212": 4835, - "6213": 4836, - "6214": 4836, - "6215": 4837, - "6216": 4838, - "6217": 4838, - "6218": 4838, - "6219": 4839, - "6220": 4840, - "6221": 4841, - "6222": 4842, - "6223": 4843, - "6224": 4843, - "6225": 4843, - "6226": 4844, - "6227": 4845, - "6228": 4846, - "6229": 4846, - "6230": 4846, - "6231": 4847, - "6232": 4848, - "6233": 4848, - "6234": 4849, - "6235": 4849, - "6236": 4849, - "6237": 4850, - "6238": 4851, - "6239": 4851, - "6240": 4852, - "6241": 4852, - "6242": 4856, - "6243": 4856, - "6244": 4857, - "6245": 4858, - "6246": 4858, - "6247": 4859, - "6248": 4860, - "6249": 4861, - "6250": 4861, - "6251": 4862, - "6252": 4862, - "6253": 4863, - "6254": 4864, - "6255": 4865, - "6256": 4866, - "6257": 4867, - "6258": 4867, - "6259": 4868, - "6260": 4869, - "6261": 4870, - "6262": 4871, - "6263": 4872, - "6264": 4873, - "6265": 4874, - "6266": 4875, - "6267": 4876, - "6268": 4876, - "6269": 4877, - "6270": 4877, - "6271": 4878, - "6272": 4879, - "6273": 4879, - "6274": 4880, - "6275": 4881, - "6276": 4881, - "6277": 4881, - "6278": 4882, - "6279": 4883, - "6280": 4884, - "6281": 4885, - "6282": 4886, - "6283": 4886, - "6284": 4886, - "6285": 4887, - "6286": 4888, - "6287": 4888, - "6288": 4889, - "6289": 4889, - "6290": 4889, - "6291": 4890, - "6292": 4891, - "6293": 4891, - "6294": 4892, - "6295": 4892, - "6296": 4896, - "6297": 4896, - "6298": 4897, - "6299": 4898, - "6300": 4898, - "6301": 4899, - "6302": 4899, - "6303": 4900, - "6304": 4901, - "6305": 4901, - "6306": 4902, - "6307": 4902, - "6308": 4903, - "6309": 4904, - "6310": 4905, - "6311": 4906, - "6312": 4907, - "6313": 4907, - "6314": 4908, - "6315": 4909, - "6316": 4910, - "6317": 4911, - "6318": 4912, - "6319": 4913, - "6320": 4914, - "6321": 4915, - "6322": 4916, - "6323": 4916, - "6324": 4917, - "6325": 4917, - "6326": 4918, - "6327": 4919, - "6328": 4919, - "6329": 4920, - "6330": 4921, - "6331": 4921, - "6332": 4921, - "6333": 4922, - "6334": 4923, - "6335": 4924, - "6336": 4925, - "6337": 4925, - "6338": 4926, - "6339": 4926, - "6340": 4926, - "6341": 4927, - "6342": 4928, - "6343": 4928, - "6344": 4929, - "6345": 4929, - "6346": 4933, - "6347": 4933, - "6348": 4934, - "6349": 4935, - "6350": 4936, - "6351": 4937, - "6352": 4938, - "6353": 4941, - "6354": 4941, - "6355": 4942, - "6356": 4943, - "6357": 4944, - "6358": 4944, - "6359": 4945, - "6360": 4946, - "6361": 4947, - "6362": 4948, - "6363": 4949, - "6364": 4950, - "6365": 4950, - "6366": 4950, - "6367": 4951, - "6368": 4952, - "6369": 4955, - "6370": 4955, - "6371": 4955, - "6372": 4959, - "6373": 4960, - "6374": 4961, - "6375": 4961, - "6376": 4962, - "6377": 4962, - "6378": 4963, - "6379": 4963, - "6380": 4964, - "6381": 4964, - "6382": 4965, - "6383": 4965, - "6384": 4966, - "6385": 4967, - "6386": 4968, - "6387": 4968, - "6388": 4968, - "6389": 4969, - "6390": 4970, - "6391": 4970, - "6392": 4971, - "6393": 4971, - "6394": 4972, - "6395": 4972, - "6396": 4973, - "6397": 4974, - "6398": 4974, - "6399": 4975, - "6400": 4975, - "6401": 4976, - "6402": 4977, - "6403": 4978, - "6404": 4979, - "6405": 4979, - "6406": 4979, - "6407": 4980, - "6408": 4981, - "6409": 4982, - "6410": 4983, - "6411": 4984, - "6412": 4984, - "6413": 4985, - "6414": 4986, - "6415": 4987, - "6416": 4988, - "6417": 4988, - "6418": 4988, - "6419": 4989, - "6420": 4989, - "6421": 4990, - "6422": 4990, - "6423": 4991, - "6424": 4992, - "6425": 4993, - "6426": 4993, - "6427": 4994, - "6428": 4994, - "6429": 4995, - "6430": 4995, - "6431": 4996, - "6432": 4997, - "6433": 4997, - "6434": 5001, - "6435": 5001, - "6436": 5002, - "6437": 5003, - "6438": 5003, - "6439": 5004, - "6440": 5005, - "6441": 5006, - "6442": 5006, - "6443": 5007, - "6444": 5007, - "6445": 5008, - "6446": 5009, - "6447": 5010, - "6448": 5011, - "6449": 5012, - "6450": 5012, - "6451": 5013, - "6452": 5014, - "6453": 5015, - "6454": 5016, - "6455": 5017, - "6456": 5018, - "6457": 5019, - "6458": 5020, - "6459": 5021, - "6460": 5021, - "6461": 5021, - "6462": 5022, - "6463": 5023, - "6464": 5024, - "6465": 5025, - "6466": 5025, - "6467": 5025, - "6468": 5026, - "6469": 5027, - "6470": 5028, - "6471": 5029, - "6472": 5030, - "6473": 5031, - "6474": 5032, - "6475": 5035, - "6476": 5035, - "6477": 5036, - "6478": 5037, - "6479": 5038, - "6480": 5038, - "6481": 5039, - "6482": 5040, - "6483": 5041, - "6484": 5042, - "6485": 5043, - "6486": 5044, - "6487": 5044, - "6488": 5044, - "6489": 5045, - "6490": 5046, - "6491": 5049, - "6492": 5049, - "6493": 5049, - "6494": 5053, - "6495": 5054, - "6496": 5055, - "6497": 5055, - "6498": 5056, - "6499": 5056, - "6500": 5057, - "6501": 5057, - "6502": 5058, - "6503": 5058, - "6504": 5059, - "6505": 5059, - "6506": 5060, - "6507": 5061, - "6508": 5062, - "6509": 5062, - "6510": 5062, + "2219": 1777, + "2220": 1778, + "2221": 1779, + "2222": 1779, + "2223": 1780, + "2224": 1781, + "2225": 1782, + "2226": 1783, + "2227": 1784, + "2228": 1785, + "2229": 1786, + "2230": 1787, + "2231": 1788, + "2232": 1789, + "2233": 1790, + "2234": 1791, + "2235": 1792, + "2236": 1793, + "2237": 1794, + "2238": 1797, + "2239": 1797, + "2240": 1798, + "2241": 1799, + "2242": 1800, + "2243": 1800, + "2244": 1801, + "2245": 1802, + "2246": 1803, + "2247": 1804, + "2248": 1805, + "2249": 1806, + "2250": 1806, + "2251": 1806, + "2252": 1807, + "2253": 1808, + "2254": 1811, + "2255": 1811, + "2256": 1811, + "2257": 1815, + "2258": 1816, + "2259": 1817, + "2260": 1817, + "2261": 1817, + "2262": 1817, + "2263": 1818, + "2264": 1818, + "2265": 1819, + "2266": 1820, + "2267": 1820, + "2268": 1820, + "2269": 1821, + "2270": 1821, + "2271": 1822, + "2272": 1823, + "2273": 1823, + "2274": 1823, + "2275": 1824, + "2276": 1824, + "2277": 1824, + "2278": 1825, + "2279": 1825, + "2280": 1826, + "2281": 1827, + "2282": 1827, + "2283": 1827, + "2284": 1828, + "2285": 1829, + "2286": 1830, + "2287": 1830, + "2288": 1834, + "2289": 1834, + "2290": 1835, + "2291": 1836, + "2292": 1837, + "2293": 1838, + "2294": 1839, + "2295": 1842, + "2296": 1842, + "2297": 1843, + "2298": 1844, + "2299": 1845, + "2300": 1845, + "2301": 1846, + "2302": 1847, + "2303": 1848, + "2304": 1849, + "2305": 1850, + "2306": 1850, + "2307": 1850, + "2308": 1851, + "2309": 1851, + "2310": 1851, + "2311": 1852, + "2312": 1853, + "2313": 1856, + "2314": 1856, + "2315": 1856, + "2316": 1860, + "2317": 1860, + "2318": 1861, + "2319": 1862, + "2320": 1862, + "2321": 1863, + "2322": 1864, + "2323": 1865, + "2324": 1866, + "2325": 1866, + "2326": 1867, + "2327": 1868, + "2328": 1869, + "2329": 1870, + "2330": 1871, + "2331": 1872, + "2332": 1875, + "2333": 1875, + "2334": 1876, + "2335": 1877, + "2336": 1878, + "2337": 1878, + "2338": 1879, + "2339": 1880, + "2340": 1881, + "2341": 1882, + "2342": 1883, + "2343": 1884, + "2344": 1884, + "2345": 1884, + "2346": 1885, + "2347": 1886, + "2348": 1889, + "2349": 1889, + "2350": 1889, + "2351": 1893, + "2352": 1893, + "2353": 1894, + "2354": 1895, + "2355": 1895, + "2356": 1896, + "2357": 1897, + "2358": 1898, + "2359": 1898, + "2360": 1899, + "2361": 1900, + "2362": 1901, + "2363": 1901, + "2364": 1902, + "2365": 1903, + "2366": 1904, + "2367": 1904, + "2368": 1908, + "2369": 1908, + "2370": 1909, + "2371": 1910, + "2372": 1911, + "2373": 1912, + "2374": 1913, + "2375": 1914, + "2376": 1915, + "2377": 1916, + "2378": 1917, + "2379": 1918, + "2380": 1919, + "2381": 1920, + "2382": 1921, + "2383": 1922, + "2384": 1925, + "2385": 1925, + "2386": 1926, + "2387": 1927, + "2388": 1928, + "2389": 1928, + "2390": 1929, + "2391": 1930, + "2392": 1931, + "2393": 1932, + "2394": 1933, + "2395": 1934, + "2396": 1934, + "2397": 1934, + "2398": 1935, + "2399": 1936, + "2400": 1939, + "2401": 1939, + "2402": 1939, + "2403": 1943, + "2404": 1943, + "2405": 1944, + "2406": 1945, + "2407": 1945, + "2408": 1946, + "2409": 1947, + "2410": 1948, + "2411": 1948, + "2412": 1949, + "2413": 1950, + "2414": 1951, + "2415": 1951, + "2416": 1952, + "2417": 1953, + "2418": 1954, + "2419": 1954, + "2420": 1958, + "2421": 1958, + "2422": 1959, + "2423": 1960, + "2424": 1961, + "2425": 1962, + "2426": 1963, + "2427": 1966, + "2428": 1966, + "2429": 1967, + "2430": 1968, + "2431": 1969, + "2432": 1969, + "2433": 1970, + "2434": 1971, + "2435": 1972, + "2436": 1973, + "2437": 1974, + "2438": 1974, + "2439": 1974, + "2440": 1975, + "2441": 1975, + "2442": 1975, + "2443": 1976, + "2444": 1977, + "2445": 1980, + "2446": 1980, + "2447": 1980, + "2448": 1984, + "2449": 1984, + "2450": 1985, + "2451": 1986, + "2452": 1987, + "2453": 1988, + "2454": 1989, + "2455": 1990, + "2456": 1991, + "2457": 1992, + "2458": 1993, + "2459": 1994, + "2460": 1995, + "2461": 1996, + "2462": 1997, + "2463": 1998, + "2464": 2001, + "2465": 2001, + "2466": 2002, + "2467": 2003, + "2468": 2004, + "2469": 2004, + "2470": 2005, + "2471": 2006, + "2472": 2007, + "2473": 2008, + "2474": 2009, + "2475": 2010, + "2476": 2010, + "2477": 2010, + "2478": 2011, + "2479": 2012, + "2480": 2015, + "2481": 2015, + "2482": 2015, + "2483": 2019, + "2484": 2019, + "2485": 2020, + "2486": 2021, + "2487": 2021, + "2488": 2022, + "2489": 2023, + "2490": 2024, + "2491": 2024, + "2492": 2025, + "2493": 2026, + "2494": 2027, + "2495": 2027, + "2496": 2028, + "2497": 2029, + "2498": 2030, + "2499": 2030, + "2500": 2034, + "2501": 2034, + "2502": 2035, + "2503": 2036, + "2504": 2037, + "2505": 2038, + "2506": 2039, + "2507": 2040, + "2508": 2040, + "2509": 2041, + "2510": 2042, + "2511": 2043, + "2512": 2043, + "2513": 2047, + "2514": 2047, + "2515": 2048, + "2516": 2049, + "2517": 2050, + "2518": 2051, + "2519": 2052, + "2520": 2053, + "2521": 2054, + "2522": 2055, + "2523": 2056, + "2524": 2057, + "2525": 2058, + "2526": 2059, + "2527": 2060, + "2528": 2061, + "2529": 2064, + "2530": 2064, + "2531": 2065, + "2532": 2066, + "2533": 2067, + "2534": 2067, + "2535": 2068, + "2536": 2069, + "2537": 2070, + "2538": 2071, + "2539": 2072, + "2540": 2073, + "2541": 2073, + "2542": 2073, + "2543": 2074, + "2544": 2075, + "2545": 2078, + "2546": 2078, + "2547": 2078, + "2548": 2082, + "2549": 2083, + "2550": 2084, + "2551": 2084, + "2552": 2085, + "2553": 2085, + "2554": 2086, + "2555": 2087, + "2556": 2087, + "2557": 2087, + "2558": 2088, + "2559": 2088, + "2560": 2088, + "2561": 2089, + "2562": 2089, + "2563": 2090, + "2564": 2091, + "2565": 2091, + "2566": 2091, + "2567": 2092, + "2568": 2093, + "2569": 2094, + "2570": 2095, + "2571": 2096, + "2572": 2096, + "2573": 2097, + "2574": 2097, + "2575": 2098, + "2576": 2099, + "2577": 2099, + "2578": 2099, + "2579": 2100, + "2580": 2100, + "2581": 2100, + "2582": 2101, + "2583": 2101, + "2584": 2102, + "2585": 2103, + "2586": 2103, + "2587": 2103, + "2588": 2104, + "2589": 2105, + "2590": 2106, + "2591": 2107, + "2592": 2108, + "2593": 2109, + "2594": 2110, + "2595": 2110, + "2596": 2114, + "2597": 2114, + "2598": 2115, + "2599": 2116, + "2600": 2116, + "2601": 2117, + "2602": 2118, + "2603": 2118, + "2604": 2119, + "2605": 2120, + "2606": 2121, + "2607": 2122, + "2608": 2123, + "2609": 2124, + "2610": 2125, + "2611": 2126, + "2612": 2127, + "2613": 2128, + "2614": 2129, + "2615": 2130, + "2616": 2131, + "2617": 2132, + "2618": 2135, + "2619": 2135, + "2620": 2136, + "2621": 2137, + "2622": 2138, + "2623": 2138, + "2624": 2139, + "2625": 2140, + "2626": 2141, + "2627": 2142, + "2628": 2143, + "2629": 2144, + "2630": 2144, + "2631": 2144, + "2632": 2145, + "2633": 2146, + "2634": 2149, + "2635": 2149, + "2636": 2149, + "2637": 2153, + "2638": 2154, + "2639": 2155, + "2640": 2155, + "2641": 2155, + "2642": 2155, + "2643": 2156, + "2644": 2157, + "2645": 2158, + "2646": 2158, + "2647": 2158, + "2648": 2159, + "2649": 2160, + "2650": 2161, + "2651": 2161, + "2652": 2161, + "2653": 2162, + "2654": 2162, + "2655": 2162, + "2656": 2163, + "2657": 2163, + "2658": 2164, + "2659": 2165, + "2660": 2165, + "2661": 2166, + "2662": 2167, + "2663": 2168, + "2664": 2169, + "2665": 2170, + "2666": 2171, + "2667": 2171, + "2668": 2171, + "2669": 2172, + "2670": 2172, + "2671": 2173, + "2672": 2174, + "2673": 2174, + "2674": 2174, + "2675": 2175, + "2676": 2175, + "2677": 2176, + "2678": 2177, + "2679": 2177, + "2680": 2177, + "2681": 2178, + "2682": 2179, + "2683": 2180, + "2684": 2181, + "2685": 2182, + "2686": 2182, + "2687": 2182, + "2688": 2183, + "2689": 2184, + "2690": 2185, + "2691": 2185, + "2692": 2189, + "2693": 2189, + "2694": 2190, + "2695": 2191, + "2696": 2192, + "2697": 2193, + "2698": 2194, + "2699": 2197, + "2700": 2197, + "2701": 2198, + "2702": 2199, + "2703": 2200, + "2704": 2200, + "2705": 2201, + "2706": 2202, + "2707": 2203, + "2708": 2204, + "2709": 2205, + "2710": 2206, + "2711": 2206, + "2712": 2206, + "2713": 2207, + "2714": 2208, + "2715": 2211, + "2716": 2211, + "2717": 2211, + "2718": 2215, + "2719": 2216, + "2720": 2217, + "2721": 2217, + "2722": 2218, + "2723": 2219, + "2724": 2220, + "2725": 2220, + "2726": 2220, + "2727": 2221, + "2728": 2221, + "2729": 2221, + "2730": 2222, + "2731": 2223, + "2732": 2224, + "2733": 2224, + "2734": 2224, + "2735": 2225, + "2736": 2225, + "2737": 2225, + "2738": 2226, + "2739": 2226, + "2740": 2227, + "2741": 2228, + "2742": 2228, + "2743": 2228, + "2744": 2229, + "2745": 2229, + "2746": 2230, + "2747": 2231, + "2748": 2231, + "2749": 2231, + "2750": 2232, + "2751": 2233, + "2752": 2234, + "2753": 2235, + "2754": 2236, + "2755": 2236, + "2756": 2236, + "2757": 2237, + "2758": 2237, + "2759": 2238, + "2760": 2239, + "2761": 2239, + "2762": 2239, + "2763": 2240, + "2764": 2240, + "2765": 2241, + "2766": 2242, + "2767": 2242, + "2768": 2242, + "2769": 2243, + "2770": 2244, + "2771": 2245, + "2772": 2246, + "2773": 2247, + "2774": 2247, + "2775": 2247, + "2776": 2248, + "2777": 2248, + "2778": 2249, + "2779": 2250, + "2780": 2250, + "2781": 2250, + "2782": 2251, + "2783": 2252, + "2784": 2253, + "2785": 2253, + "2786": 2253, + "2787": 2254, + "2788": 2255, + "2789": 2256, + "2790": 2257, + "2791": 2258, + "2792": 2258, + "2793": 2258, + "2794": 2259, + "2795": 2260, + "2796": 2261, + "2797": 2261, + "2798": 2265, + "2799": 2265, + "2800": 2266, + "2801": 2267, + "2802": 2267, + "2803": 2268, + "2804": 2268, + "2805": 2269, + "2806": 2270, + "2807": 2270, + "2808": 2271, + "2809": 2271, + "2810": 2272, + "2811": 2273, + "2812": 2274, + "2813": 2275, + "2814": 2276, + "2815": 2276, + "2816": 2277, + "2817": 2278, + "2818": 2279, + "2819": 2280, + "2820": 2281, + "2821": 2282, + "2822": 2283, + "2823": 2284, + "2824": 2285, + "2825": 2286, + "2826": 2287, + "2827": 2288, + "2828": 2289, + "2829": 2292, + "2830": 2292, + "2831": 2293, + "2832": 2294, + "2833": 2295, + "2834": 2295, + "2835": 2296, + "2836": 2297, + "2837": 2298, + "2838": 2299, + "2839": 2300, + "2840": 2301, + "2841": 2301, + "2842": 2301, + "2843": 2302, + "2844": 2303, + "2845": 2306, + "2846": 2306, + "2847": 2306, + "2848": 2310, + "2849": 2311, + "2850": 2312, + "2851": 2312, + "2852": 2313, + "2853": 2313, + "2854": 2314, + "2855": 2315, + "2856": 2315, + "2857": 2315, + "2858": 2316, + "2859": 2316, + "2860": 2316, + "2861": 2317, + "2862": 2318, + "2863": 2319, + "2864": 2319, + "2865": 2319, + "2866": 2320, + "2867": 2321, + "2868": 2322, + "2869": 2323, + "2870": 2323, + "2871": 2323, + "2872": 2324, + "2873": 2324, + "2874": 2325, + "2875": 2326, + "2876": 2326, + "2877": 2326, + "2878": 2327, + "2879": 2328, + "2880": 2329, + "2881": 2330, + "2882": 2330, + "2883": 2330, + "2884": 2331, + "2885": 2331, + "2886": 2332, + "2887": 2333, + "2888": 2333, + "2889": 2333, + "2890": 2334, + "2891": 2335, + "2892": 2336, + "2893": 2337, + "2894": 2337, + "2895": 2337, + "2896": 2338, + "2897": 2338, + "2898": 2339, + "2899": 2340, + "2900": 2340, + "2901": 2340, + "2902": 2341, + "2903": 2342, + "2904": 2343, + "2905": 2344, + "2906": 2344, + "2907": 2344, + "2908": 2345, + "2909": 2346, + "2910": 2347, + "2911": 2347, + "2912": 2351, + "2913": 2351, + "2914": 2352, + "2915": 2353, + "2916": 2353, + "2917": 2354, + "2918": 2355, + "2919": 2355, + "2920": 2356, + "2921": 2357, + "2922": 2357, + "2923": 2357, + "2924": 2358, + "2925": 2359, + "2926": 2359, + "2927": 2363, + "2928": 2363, + "2929": 2364, + "2930": 2365, + "2931": 2365, + "2932": 2366, + "2933": 2367, + "2934": 2368, + "2935": 2368, + "2936": 2369, + "2937": 2369, + "2938": 2370, + "2939": 2371, + "2940": 2372, + "2941": 2373, + "2942": 2374, + "2943": 2374, + "2944": 2375, + "2945": 2376, + "2946": 2377, + "2947": 2378, + "2948": 2379, + "2949": 2380, + "2950": 2381, + "2951": 2382, + "2952": 2383, + "2953": 2384, + "2954": 2384, + "2955": 2385, + "2956": 2386, + "2957": 2386, + "2958": 2386, + "2959": 2387, + "2960": 2387, + "2961": 2388, + "2962": 2389, + "2963": 2389, + "2964": 2389, + "2965": 2390, + "2966": 2391, + "2967": 2392, + "2968": 2393, + "2969": 2394, + "2970": 2395, + "2971": 2395, + "2972": 2395, + "2973": 2396, + "2974": 2397, + "2975": 2397, + "2976": 2398, + "2977": 2398, + "2978": 2398, + "2979": 2399, + "2980": 2400, + "2981": 2400, + "2982": 2401, + "2983": 2401, + "2984": 2401, + "2985": 2402, + "2986": 2403, + "2987": 2403, + "2988": 2404, + "2989": 2404, + "2990": 2404, + "2991": 2405, + "2992": 2406, + "2993": 2406, + "2994": 2407, + "2995": 2407, + "2996": 2411, + "2997": 2411, + "2998": 2412, + "2999": 2413, + "3000": 2413, + "3001": 2414, + "3002": 2414, + "3003": 2415, + "3004": 2416, + "3005": 2416, + "3006": 2417, + "3007": 2417, + "3008": 2418, + "3009": 2419, + "3010": 2420, + "3011": 2421, + "3012": 2422, + "3013": 2422, + "3014": 2423, + "3015": 2424, + "3016": 2425, + "3017": 2426, + "3018": 2427, + "3019": 2428, + "3020": 2429, + "3021": 2430, + "3022": 2431, + "3023": 2432, + "3024": 2432, + "3025": 2433, + "3026": 2434, + "3027": 2434, + "3028": 2434, + "3029": 2435, + "3030": 2435, + "3031": 2436, + "3032": 2437, + "3033": 2437, + "3034": 2437, + "3035": 2438, + "3036": 2439, + "3037": 2440, + "3038": 2441, + "3039": 2442, + "3040": 2442, + "3041": 2443, + "3042": 2443, + "3043": 2443, + "3044": 2444, + "3045": 2445, + "3046": 2445, + "3047": 2446, + "3048": 2446, + "3049": 2446, + "3050": 2447, + "3051": 2448, + "3052": 2448, + "3053": 2449, + "3054": 2449, + "3055": 2449, + "3056": 2450, + "3057": 2451, + "3058": 2451, + "3059": 2452, + "3060": 2452, + "3061": 2456, + "3062": 2456, + "3063": 2457, + "3064": 2458, + "3065": 2458, + "3066": 2459, + "3067": 2459, + "3068": 2460, + "3069": 2461, + "3070": 2461, + "3071": 2462, + "3072": 2462, + "3073": 2463, + "3074": 2464, + "3075": 2465, + "3076": 2466, + "3077": 2467, + "3078": 2467, + "3079": 2468, + "3080": 2469, + "3081": 2470, + "3082": 2471, + "3083": 2472, + "3084": 2473, + "3085": 2474, + "3086": 2475, + "3087": 2476, + "3088": 2477, + "3089": 2477, + "3090": 2478, + "3091": 2479, + "3092": 2479, + "3093": 2479, + "3094": 2480, + "3095": 2480, + "3096": 2481, + "3097": 2482, + "3098": 2482, + "3099": 2482, + "3100": 2483, + "3101": 2484, + "3102": 2485, + "3103": 2486, + "3104": 2487, + "3105": 2487, + "3106": 2488, + "3107": 2488, + "3108": 2488, + "3109": 2489, + "3110": 2490, + "3111": 2490, + "3112": 2491, + "3113": 2491, + "3114": 2491, + "3115": 2492, + "3116": 2493, + "3117": 2493, + "3118": 2494, + "3119": 2494, + "3120": 2498, + "3121": 2498, + "3122": 2499, + "3123": 2500, + "3124": 2500, + "3125": 2501, + "3126": 2501, + "3127": 2502, + "3128": 2503, + "3129": 2503, + "3130": 2504, + "3131": 2504, + "3132": 2505, + "3133": 2506, + "3134": 2507, + "3135": 2508, + "3136": 2509, + "3137": 2509, + "3138": 2510, + "3139": 2511, + "3140": 2512, + "3141": 2513, + "3142": 2514, + "3143": 2515, + "3144": 2516, + "3145": 2517, + "3146": 2518, + "3147": 2519, + "3148": 2519, + "3149": 2520, + "3150": 2521, + "3151": 2521, + "3152": 2521, + "3153": 2522, + "3154": 2522, + "3155": 2523, + "3156": 2524, + "3157": 2524, + "3158": 2524, + "3159": 2525, + "3160": 2526, + "3161": 2527, + "3162": 2528, + "3163": 2529, + "3164": 2529, + "3165": 2530, + "3166": 2530, + "3167": 2530, + "3168": 2531, + "3169": 2532, + "3170": 2532, + "3171": 2533, + "3172": 2533, + "3173": 2537, + "3174": 2537, + "3175": 2538, + "3176": 2539, + "3177": 2540, + "3178": 2541, + "3179": 2542, + "3180": 2545, + "3181": 2545, + "3182": 2546, + "3183": 2547, + "3184": 2548, + "3185": 2548, + "3186": 2549, + "3187": 2550, + "3188": 2551, + "3189": 2552, + "3190": 2553, + "3191": 2554, + "3192": 2555, + "3193": 2555, + "3194": 2555, + "3195": 2556, + "3196": 2557, + "3197": 2560, + "3198": 2560, + "3199": 2560, + "3200": 2564, + "3201": 2564, + "3202": 2565, + "3203": 2566, + "3204": 2566, + "3205": 2566, + "3206": 2567, + "3207": 2567, + "3208": 2568, + "3209": 2569, + "3210": 2569, + "3211": 2569, + "3212": 2570, + "3213": 2571, + "3214": 2572, + "3215": 2573, + "3216": 2574, + "3217": 2574, + "3218": 2578, + "3219": 2579, + "3220": 2580, + "3221": 2580, + "3222": 2581, + "3223": 2582, + "3224": 2583, + "3225": 2583, + "3226": 2583, + "3227": 2584, + "3228": 2584, + "3229": 2584, + "3230": 2585, + "3231": 2586, + "3232": 2587, + "3233": 2587, + "3234": 2587, + "3235": 2588, + "3236": 2588, + "3237": 2588, + "3238": 2589, + "3239": 2589, + "3240": 2590, + "3241": 2591, + "3242": 2591, + "3243": 2591, + "3244": 2592, + "3245": 2592, + "3246": 2593, + "3247": 2594, + "3248": 2594, + "3249": 2594, + "3250": 2595, + "3251": 2596, + "3252": 2597, + "3253": 2598, + "3254": 2599, + "3255": 2599, + "3256": 2599, + "3257": 2600, + "3258": 2600, + "3259": 2601, + "3260": 2601, + "3261": 2601, + "3262": 2602, + "3263": 2602, + "3264": 2603, + "3265": 2604, + "3266": 2604, + "3267": 2604, + "3268": 2605, + "3269": 2606, + "3270": 2607, + "3271": 2607, + "3272": 2607, + "3273": 2608, + "3274": 2609, + "3275": 2610, + "3276": 2611, + "3277": 2612, + "3278": 2612, + "3279": 2612, + "3280": 2613, + "3281": 2614, + "3282": 2615, + "3283": 2615, + "3284": 2619, + "3285": 2619, + "3286": 2620, + "3287": 2621, + "3288": 2622, + "3289": 2623, + "3290": 2624, + "3291": 2627, + "3292": 2627, + "3293": 2628, + "3294": 2629, + "3295": 2630, + "3296": 2630, + "3297": 2631, + "3298": 2632, + "3299": 2633, + "3300": 2634, + "3301": 2635, + "3302": 2636, + "3303": 2636, + "3304": 2636, + "3305": 2637, + "3306": 2638, + "3307": 2641, + "3308": 2641, + "3309": 2641, + "3310": 2645, + "3311": 2646, + "3312": 2647, + "3313": 2647, + "3314": 2647, + "3315": 2648, + "3316": 2649, + "3317": 2650, + "3318": 2650, + "3319": 2650, + "3320": 2651, + "3321": 2652, + "3322": 2653, + "3323": 2654, + "3324": 2655, + "3325": 2655, + "3326": 2659, + "3327": 2659, + "3328": 2660, + "3329": 2661, + "3330": 2662, + "3331": 2663, + "3332": 2664, + "3333": 2665, + "3334": 2666, + "3335": 2666, + "3336": 2666, + "3337": 2667, + "3338": 2668, + "3339": 2668, + "3340": 2668, + "3341": 2669, + "3342": 2670, + "3343": 2670, + "3344": 2671, + "3345": 2672, + "3346": 2672, + "3347": 2672, + "3348": 2673, + "3349": 2674, + "3350": 2674, + "3351": 2678, + "3352": 2678, + "3353": 2679, + "3354": 2680, + "3355": 2681, + "3356": 2682, + "3357": 2683, + "3358": 2686, + "3359": 2686, + "3360": 2687, + "3361": 2688, + "3362": 2689, + "3363": 2689, + "3364": 2690, + "3365": 2691, + "3366": 2692, + "3367": 2693, + "3368": 2694, + "3369": 2695, + "3370": 2695, + "3371": 2695, + "3372": 2696, + "3373": 2697, + "3374": 2700, + "3375": 2700, + "3376": 2700, + "3377": 2704, + "3378": 2705, + "3379": 2706, + "3380": 2706, + "3381": 2706, + "3382": 2707, + "3383": 2708, + "3384": 2709, + "3385": 2709, + "3386": 2709, + "3387": 2710, + "3388": 2711, + "3389": 2711, + "3390": 2712, + "3391": 2713, + "3392": 2713, + "3393": 2713, + "3394": 2714, + "3395": 2715, + "3396": 2715, + "3397": 2716, + "3398": 2717, + "3399": 2718, + "3400": 2718, + "3401": 2722, + "3402": 2722, + "3403": 2723, + "3404": 2724, + "3405": 2725, + "3406": 2726, + "3407": 2727, + "3408": 2728, + "3409": 2729, + "3410": 2729, + "3411": 2729, + "3412": 2730, + "3413": 2731, + "3414": 2731, + "3415": 2731, + "3416": 2732, + "3417": 2733, + "3418": 2734, + "3419": 2735, + "3420": 2736, + "3421": 2737, + "3422": 2738, + "3423": 2739, + "3424": 2740, + "3425": 2740, + "3426": 2744, + "3427": 2744, + "3428": 2745, + "3429": 2746, + "3430": 2747, + "3431": 2748, + "3432": 2749, + "3433": 2752, + "3434": 2752, + "3435": 2753, + "3436": 2754, + "3437": 2755, + "3438": 2755, + "3439": 2756, + "3440": 2757, + "3441": 2758, + "3442": 2759, + "3443": 2760, + "3444": 2761, + "3445": 2762, + "3446": 2762, + "3447": 2762, + "3448": 2763, + "3449": 2764, + "3450": 2767, + "3451": 2767, + "3452": 2767, + "3453": 2771, + "3454": 2772, + "3455": 2773, + "3456": 2773, + "3457": 2773, + "3458": 2774, + "3459": 2775, + "3460": 2776, + "3461": 2776, + "3462": 2776, + "3463": 2777, + "3464": 2778, + "3465": 2778, + "3466": 2779, + "3467": 2780, + "3468": 2780, + "3469": 2780, + "3470": 2781, + "3471": 2782, + "3472": 2782, + "3473": 2783, + "3474": 2784, + "3475": 2785, + "3476": 2785, + "3477": 2789, + "3478": 2789, + "3479": 2790, + "3480": 2791, + "3481": 2792, + "3482": 2793, + "3483": 2794, + "3484": 2795, + "3485": 2796, + "3486": 2796, + "3487": 2796, + "3488": 2797, + "3489": 2798, + "3490": 2798, + "3491": 2798, + "3492": 2799, + "3493": 2800, + "3494": 2801, + "3495": 2802, + "3496": 2803, + "3497": 2804, + "3498": 2805, + "3499": 2806, + "3500": 2807, + "3501": 2808, + "3502": 2809, + "3503": 2810, + "3504": 2810, + "3505": 2811, + "3506": 2811, + "3507": 2812, + "3508": 2813, + "3509": 2814, + "3510": 2814, + "3511": 2815, + "3512": 2815, + "3513": 2819, + "3514": 2819, + "3515": 2820, + "3516": 2820, + "3517": 2821, + "3518": 2822, + "3519": 2823, + "3520": 2824, + "3521": 2825, + "3522": 2826, + "3523": 2829, + "3524": 2829, + "3525": 2830, + "3526": 2831, + "3527": 2832, + "3528": 2832, + "3529": 2833, + "3530": 2834, + "3531": 2835, + "3532": 2836, + "3533": 2837, + "3534": 2838, + "3535": 2838, + "3536": 2838, + "3537": 2839, + "3538": 2840, + "3539": 2843, + "3540": 2843, + "3541": 2843, + "3542": 2847, + "3543": 2848, + "3544": 2849, + "3545": 2850, + "3546": 2851, + "3547": 2852, + "3548": 2852, + "3549": 2853, + "3550": 2854, + "3551": 2855, + "3552": 2855, + "3553": 2856, + "3554": 2857, + "3555": 2858, + "3556": 2858, + "3557": 2862, + "3558": 2862, + "3559": 2863, + "3560": 2864, + "3561": 2865, + "3562": 2866, + "3563": 2867, + "3564": 2868, + "3565": 2868, + "3566": 2868, + "3567": 2869, + "3568": 2870, + "3569": 2871, + "3570": 2872, + "3571": 2873, + "3572": 2874, + "3573": 2874, + "3574": 2875, + "3575": 2876, + "3576": 2877, + "3577": 2878, + "3578": 2879, + "3579": 2880, + "3580": 2880, + "3581": 2881, + "3582": 2881, + "3583": 2882, + "3584": 2883, + "3585": 2883, + "3586": 2884, + "3587": 2885, + "3588": 2885, + "3589": 2886, + "3590": 2887, + "3591": 2888, + "3592": 2888, + "3593": 2889, + "3594": 2889, + "3595": 2890, + "3596": 2891, + "3597": 2892, + "3598": 2893, + "3599": 2894, + "3600": 2895, + "3601": 2896, + "3602": 2897, + "3603": 2897, + "3604": 2901, + "3605": 2901, + "3606": 2902, + "3607": 2903, + "3608": 2904, + "3609": 2905, + "3610": 2906, + "3611": 2909, + "3612": 2909, + "3613": 2910, + "3614": 2911, + "3615": 2912, + "3616": 2912, + "3617": 2913, + "3618": 2914, + "3619": 2915, + "3620": 2916, + "3621": 2917, + "3622": 2918, + "3623": 2918, + "3624": 2919, + "3625": 2919, + "3626": 2919, + "3627": 2920, + "3628": 2921, + "3629": 2924, + "3630": 2924, + "3631": 2924, + "3632": 2928, + "3633": 2929, + "3634": 2930, + "3635": 2930, + "3636": 2930, + "3637": 2931, + "3638": 2932, + "3639": 2933, + "3640": 2933, + "3641": 2933, + "3642": 2934, + "3643": 2935, + "3644": 2935, + "3645": 2936, + "3646": 2937, + "3647": 2937, + "3648": 2937, + "3649": 2938, + "3650": 2939, + "3651": 2939, + "3652": 2940, + "3653": 2941, + "3654": 2941, + "3655": 2941, + "3656": 2942, + "3657": 2943, + "3658": 2943, + "3659": 2944, + "3660": 2945, + "3661": 2945, + "3662": 2945, + "3663": 2946, + "3664": 2947, + "3665": 2947, + "3666": 2948, + "3667": 2949, + "3668": 2949, + "3669": 2949, + "3670": 2950, + "3671": 2951, + "3672": 2951, + "3673": 2952, + "3674": 2953, + "3675": 2953, + "3676": 2953, + "3677": 2954, + "3678": 2955, + "3679": 2956, + "3680": 2957, + "3681": 2957, + "3682": 2957, + "3683": 2958, + "3684": 2959, + "3685": 2959, + "3686": 2960, + "3687": 2961, + "3688": 2961, + "3689": 2961, + "3690": 2962, + "3691": 2963, + "3692": 2963, + "3693": 2964, + "3694": 2965, + "3695": 2965, + "3696": 2965, + "3697": 2966, + "3698": 2967, + "3699": 2967, + "3700": 2968, + "3701": 2969, + "3702": 2970, + "3703": 2970, + "3704": 2974, + "3705": 2975, + "3706": 2975, + "3707": 2979, + "3708": 2979, + "3709": 2980, + "3710": 2980, + "3711": 2984, + "3712": 2984, + "3713": 2985, + "3714": 2986, + "3715": 2987, + "3716": 2987, + "3717": 2988, + "3718": 2989, + "3719": 2990, + "3720": 2990, + "3721": 2990, + "3722": 2991, + "3723": 2991, + "3724": 2992, + "3725": 2993, + "3726": 2994, + "3727": 2995, + "3728": 2996, + "3729": 2996, + "3730": 2997, + "3731": 2997, + "3732": 2998, + "3733": 2999, + "3734": 3000, + "3735": 3001, + "3736": 3002, + "3737": 3002, + "3738": 3003, + "3739": 3003, + "3740": 3004, + "3741": 3005, + "3742": 3005, + "3743": 3006, + "3744": 3007, + "3745": 3007, + "3746": 3008, + "3747": 3009, + "3748": 3010, + "3749": 3010, + "3750": 3011, + "3751": 3011, + "3752": 3012, + "3753": 3013, + "3754": 3014, + "3755": 3015, + "3756": 3016, + "3757": 3017, + "3758": 3018, + "3759": 3019, + "3760": 3019, + "3761": 3020, + "3762": 3021, + "3763": 3021, + "3764": 3021, + "3765": 3022, + "3766": 3022, + "3767": 3023, + "3768": 3023, + "3769": 3024, + "3770": 3024, + "3771": 3025, + "3772": 3026, + "3773": 3027, + "3774": 3028, + "3775": 3029, + "3776": 3030, + "3777": 3030, + "3778": 3031, + "3779": 3031, + "3780": 3035, + "3781": 3035, + "3782": 3036, + "3783": 3037, + "3784": 3038, + "3785": 3039, + "3786": 3040, + "3787": 3043, + "3788": 3043, + "3789": 3044, + "3790": 3045, + "3791": 3046, + "3792": 3046, + "3793": 3047, + "3794": 3048, + "3795": 3049, + "3796": 3050, + "3797": 3051, + "3798": 3052, + "3799": 3053, + "3800": 3053, + "3801": 3053, + "3802": 3054, + "3803": 3055, + "3804": 3058, + "3805": 3058, + "3806": 3058, + "3807": 3062, + "3808": 3063, + "3809": 3064, + "3810": 3064, + "3811": 3064, + "3812": 3065, + "3813": 3066, + "3814": 3067, + "3815": 3067, + "3816": 3067, + "3817": 3068, + "3818": 3069, + "3819": 3069, + "3820": 3070, + "3821": 3071, + "3822": 3071, + "3823": 3071, + "3824": 3072, + "3825": 3073, + "3826": 3073, + "3827": 3074, + "3828": 3075, + "3829": 3076, + "3830": 3076, + "3831": 3080, + "3832": 3080, + "3833": 3081, + "3834": 3082, + "3835": 3083, + "3836": 3084, + "3837": 3085, + "3838": 3086, + "3839": 3087, + "3840": 3088, + "3841": 3088, + "3842": 3089, + "3843": 3090, + "3844": 3091, + "3845": 3092, + "3846": 3093, + "3847": 3094, + "3848": 3095, + "3849": 3096, + "3850": 3097, + "3851": 3097, + "3852": 3098, + "3853": 3099, + "3854": 3100, + "3855": 3101, + "3856": 3102, + "3857": 3103, + "3858": 3104, + "3859": 3105, + "3860": 3106, + "3861": 3106, + "3862": 3107, + "3863": 3108, + "3864": 3109, + "3865": 3109, + "3866": 3113, + "3867": 3113, + "3868": 3114, + "3869": 3115, + "3870": 3116, + "3871": 3117, + "3872": 3118, + "3873": 3121, + "3874": 3121, + "3875": 3122, + "3876": 3123, + "3877": 3124, + "3878": 3124, + "3879": 3125, + "3880": 3126, + "3881": 3127, + "3882": 3128, + "3883": 3129, + "3884": 3130, + "3885": 3130, + "3886": 3130, + "3887": 3131, + "3888": 3132, + "3889": 3135, + "3890": 3135, + "3891": 3135, + "3892": 3139, + "3893": 3140, + "3894": 3141, + "3895": 3141, + "3896": 3141, + "3897": 3142, + "3898": 3143, + "3899": 3144, + "3900": 3144, + "3901": 3144, + "3902": 3145, + "3903": 3146, + "3904": 3146, + "3905": 3147, + "3906": 3148, + "3907": 3148, + "3908": 3148, + "3909": 3149, + "3910": 3150, + "3911": 3150, + "3912": 3151, + "3913": 3152, + "3914": 3153, + "3915": 3153, + "3916": 3157, + "3917": 3157, + "3918": 3158, + "3919": 3159, + "3920": 3160, + "3921": 3161, + "3922": 3162, + "3923": 3163, + "3924": 3163, + "3925": 3163, + "3926": 3164, + "3927": 3165, + "3928": 3166, + "3929": 3167, + "3930": 3168, + "3931": 3169, + "3932": 3169, + "3933": 3170, + "3934": 3171, + "3935": 3172, + "3936": 3173, + "3937": 3174, + "3938": 3175, + "3939": 3175, + "3940": 3176, + "3941": 3176, + "3942": 3177, + "3943": 3178, + "3944": 3178, + "3945": 3179, + "3946": 3180, + "3947": 3180, + "3948": 3181, + "3949": 3182, + "3950": 3183, + "3951": 3183, + "3952": 3184, + "3953": 3184, + "3954": 3185, + "3955": 3186, + "3956": 3187, + "3957": 3188, + "3958": 3189, + "3959": 3190, + "3960": 3191, + "3961": 3192, + "3962": 3192, + "3963": 3196, + "3964": 3196, + "3965": 3197, + "3966": 3198, + "3967": 3199, + "3968": 3200, + "3969": 3201, + "3970": 3204, + "3971": 3204, + "3972": 3205, + "3973": 3206, + "3974": 3207, + "3975": 3207, + "3976": 3208, + "3977": 3209, + "3978": 3210, + "3979": 3211, + "3980": 3212, + "3981": 3213, + "3982": 3214, + "3983": 3214, + "3984": 3214, + "3985": 3215, + "3986": 3216, + "3987": 3219, + "3988": 3219, + "3989": 3219, + "3990": 3223, + "3991": 3224, + "3992": 3225, + "3993": 3225, + "3994": 3225, + "3995": 3226, + "3996": 3227, + "3997": 3228, + "3998": 3228, + "3999": 3228, + "4000": 3229, + "4001": 3230, + "4002": 3230, + "4003": 3231, + "4004": 3232, + "4005": 3232, + "4006": 3232, + "4007": 3233, + "4008": 3234, + "4009": 3234, + "4010": 3235, + "4011": 3236, + "4012": 3237, + "4013": 3237, + "4014": 3241, + "4015": 3241, + "4016": 3242, + "4017": 3243, + "4018": 3244, + "4019": 3245, + "4020": 3246, + "4021": 3247, + "4022": 3247, + "4023": 3247, + "4024": 3248, + "4025": 3249, + "4026": 3250, + "4027": 3251, + "4028": 3252, + "4029": 3253, + "4030": 3253, + "4031": 3254, + "4032": 3255, + "4033": 3256, + "4034": 3257, + "4035": 3258, + "4036": 3259, + "4037": 3259, + "4038": 3260, + "4039": 3260, + "4040": 3261, + "4041": 3262, + "4042": 3262, + "4043": 3263, + "4044": 3264, + "4045": 3264, + "4046": 3265, + "4047": 3266, + "4048": 3267, + "4049": 3267, + "4050": 3268, + "4051": 3268, + "4052": 3269, + "4053": 3270, + "4054": 3271, + "4055": 3272, + "4056": 3273, + "4057": 3274, + "4058": 3275, + "4059": 3276, + "4060": 3277, + "4061": 3278, + "4062": 3278, + "4063": 3278, + "4064": 3279, + "4065": 3279, + "4066": 3280, + "4067": 3280, + "4068": 3281, + "4069": 3281, + "4070": 3282, + "4071": 3283, + "4072": 3284, + "4073": 3285, + "4074": 3286, + "4075": 3287, + "4076": 3287, + "4077": 3288, + "4078": 3288, + "4079": 3292, + "4080": 3292, + "4081": 3293, + "4082": 3294, + "4083": 3295, + "4084": 3296, + "4085": 3297, + "4086": 3300, + "4087": 3300, + "4088": 3301, + "4089": 3302, + "4090": 3303, + "4091": 3303, + "4092": 3304, + "4093": 3305, + "4094": 3306, + "4095": 3307, + "4096": 3308, + "4097": 3309, + "4098": 3309, + "4099": 3309, + "4100": 3310, + "4101": 3311, + "4102": 3314, + "4103": 3314, + "4104": 3314, + "4105": 3318, + "4106": 3319, + "4107": 3320, + "4108": 3320, + "4109": 3320, + "4110": 3321, + "4111": 3322, + "4112": 3323, + "4113": 3323, + "4114": 3323, + "4115": 3324, + "4116": 3325, + "4117": 3325, + "4118": 3326, + "4119": 3327, + "4120": 3327, + "4121": 3327, + "4122": 3328, + "4123": 3329, + "4124": 3329, + "4125": 3330, + "4126": 3331, + "4127": 3332, + "4128": 3332, + "4129": 3336, + "4130": 3336, + "4131": 3337, + "4132": 3338, + "4133": 3339, + "4134": 3340, + "4135": 3341, + "4136": 3342, + "4137": 3342, + "4138": 3342, + "4139": 3343, + "4140": 3344, + "4141": 3345, + "4142": 3346, + "4143": 3347, + "4144": 3348, + "4145": 3348, + "4146": 3349, + "4147": 3350, + "4148": 3351, + "4149": 3352, + "4150": 3353, + "4151": 3354, + "4152": 3354, + "4153": 3355, + "4154": 3355, + "4155": 3356, + "4156": 3357, + "4157": 3357, + "4158": 3358, + "4159": 3359, + "4160": 3359, + "4161": 3360, + "4162": 3361, + "4163": 3362, + "4164": 3362, + "4165": 3363, + "4166": 3363, + "4167": 3364, + "4168": 3365, + "4169": 3366, + "4170": 3367, + "4171": 3368, + "4172": 3369, + "4173": 3370, + "4174": 3371, + "4175": 3371, + "4176": 3375, + "4177": 3375, + "4178": 3376, + "4179": 3377, + "4180": 3378, + "4181": 3379, + "4182": 3380, + "4183": 3383, + "4184": 3383, + "4185": 3384, + "4186": 3385, + "4187": 3386, + "4188": 3386, + "4189": 3387, + "4190": 3388, + "4191": 3389, + "4192": 3390, + "4193": 3391, + "4194": 3392, + "4195": 3393, + "4196": 3393, + "4197": 3393, + "4198": 3394, + "4199": 3395, + "4200": 3398, + "4201": 3398, + "4202": 3398, + "4203": 3402, + "4204": 3403, + "4205": 3404, + "4206": 3404, + "4207": 3404, + "4208": 3405, + "4209": 3406, + "4210": 3407, + "4211": 3407, + "4212": 3407, + "4213": 3408, + "4214": 3409, + "4215": 3409, + "4216": 3410, + "4217": 3411, + "4218": 3411, + "4219": 3411, + "4220": 3412, + "4221": 3413, + "4222": 3413, + "4223": 3414, + "4224": 3415, + "4225": 3416, + "4226": 3416, + "4227": 3420, + "4228": 3420, + "4229": 3421, + "4230": 3422, + "4231": 3423, + "4232": 3424, + "4233": 3425, + "4234": 3426, + "4235": 3426, + "4236": 3426, + "4237": 3427, + "4238": 3428, + "4239": 3429, + "4240": 3430, + "4241": 3431, + "4242": 3432, + "4243": 3432, + "4244": 3433, + "4245": 3434, + "4246": 3435, + "4247": 3436, + "4248": 3437, + "4249": 3438, + "4250": 3438, + "4251": 3439, + "4252": 3439, + "4253": 3440, + "4254": 3441, + "4255": 3441, + "4256": 3442, + "4257": 3443, + "4258": 3443, + "4259": 3444, + "4260": 3445, + "4261": 3446, + "4262": 3446, + "4263": 3447, + "4264": 3447, + "4265": 3448, + "4266": 3449, + "4267": 3450, + "4268": 3451, + "4269": 3452, + "4270": 3453, + "4271": 3454, + "4272": 3455, + "4273": 3456, + "4274": 3457, + "4275": 3457, + "4276": 3457, + "4277": 3458, + "4278": 3458, + "4279": 3459, + "4280": 3459, + "4281": 3460, + "4282": 3460, + "4283": 3461, + "4284": 3462, + "4285": 3463, + "4286": 3464, + "4287": 3465, + "4288": 3466, + "4289": 3466, + "4290": 3467, + "4291": 3467, + "4292": 3471, + "4293": 3471, + "4294": 3472, + "4295": 3473, + "4296": 3474, + "4297": 3475, + "4298": 3476, + "4299": 3479, + "4300": 3479, + "4301": 3480, + "4302": 3481, + "4303": 3482, + "4304": 3482, + "4305": 3483, + "4306": 3484, + "4307": 3485, + "4308": 3486, + "4309": 3487, + "4310": 3487, + "4311": 3487, + "4312": 3488, + "4313": 3489, + "4314": 3492, + "4315": 3492, + "4316": 3492, + "4317": 3496, + "4318": 3496, + "4319": 3497, + "4320": 3498, + "4321": 3499, + "4322": 3500, + "4323": 3500, + "4324": 3500, + "4325": 3501, + "4326": 3502, + "4327": 3503, + "4328": 3504, + "4329": 3505, + "4330": 3506, + "4331": 3507, + "4332": 3510, + "4333": 3510, + "4334": 3511, + "4335": 3512, + "4336": 3513, + "4337": 3513, + "4338": 3514, + "4339": 3515, + "4340": 3516, + "4341": 3517, + "4342": 3518, + "4343": 3518, + "4344": 3518, + "4345": 3519, + "4346": 3519, + "4347": 3519, + "4348": 3520, + "4349": 3520, + "4350": 3520, + "4351": 3521, + "4352": 3522, + "4353": 3525, + "4354": 3525, + "4355": 3525, + "4356": 3529, + "4357": 3529, + "4358": 3530, + "4359": 3530, + "4360": 3531, + "4361": 3532, + "4362": 3533, + "4363": 3536, + "4364": 3536, + "4365": 3537, + "4366": 3538, + "4367": 3539, + "4368": 3539, + "4369": 3540, + "4370": 3541, + "4371": 3542, + "4372": 3543, + "4373": 3544, + "4374": 3545, + "4375": 3545, + "4376": 3545, + "4377": 3546, + "4378": 3547, + "4379": 3550, + "4380": 3550, + "4381": 3550, + "4382": 3554, + "4383": 3555, + "4384": 3556, + "4385": 3556, + "4386": 3557, + "4387": 3558, + "4388": 3559, + "4389": 3559, + "4390": 3559, + "4391": 3560, + "4392": 3560, + "4393": 3560, + "4394": 3561, + "4395": 3562, + "4396": 3563, + "4397": 3563, + "4398": 3563, + "4399": 3564, + "4400": 3565, + "4401": 3566, + "4402": 3567, + "4403": 3567, + "4404": 3567, + "4405": 3568, + "4406": 3568, + "4407": 3569, + "4408": 3570, + "4409": 3571, + "4410": 3572, + "4411": 3572, + "4412": 3572, + "4413": 3573, + "4414": 3574, + "4415": 3575, + "4416": 3575, + "4417": 3575, + "4418": 3576, + "4419": 3576, + "4420": 3577, + "4421": 3578, + "4422": 3578, + "4423": 3578, + "4424": 3579, + "4425": 3580, + "4426": 3581, + "4427": 3582, + "4428": 3582, + "4429": 3582, + "4430": 3583, + "4431": 3584, + "4432": 3585, + "4433": 3585, + "4434": 3589, + "4435": 3589, + "4436": 3590, + "4437": 3591, + "4438": 3592, + "4439": 3593, + "4440": 3594, + "4441": 3597, + "4442": 3597, + "4443": 3598, + "4444": 3599, + "4445": 3600, + "4446": 3600, + "4447": 3601, + "4448": 3602, + "4449": 3603, + "4450": 3604, + "4451": 3605, + "4452": 3606, + "4453": 3606, + "4454": 3606, + "4455": 3607, + "4456": 3608, + "4457": 3611, + "4458": 3611, + "4459": 3611, + "4460": 3615, + "4461": 3616, + "4462": 3617, + "4463": 3617, + "4464": 3618, + "4465": 3619, + "4466": 3620, + "4467": 3620, + "4468": 3620, + "4469": 3621, + "4470": 3621, + "4471": 3621, + "4472": 3622, + "4473": 3623, + "4474": 3624, + "4475": 3624, + "4476": 3624, + "4477": 3625, + "4478": 3626, + "4479": 3627, + "4480": 3628, + "4481": 3628, + "4482": 3628, + "4483": 3629, + "4484": 3629, + "4485": 3630, + "4486": 3631, + "4487": 3632, + "4488": 3633, + "4489": 3633, + "4490": 3633, + "4491": 3634, + "4492": 3635, + "4493": 3636, + "4494": 3636, + "4495": 3636, + "4496": 3637, + "4497": 3637, + "4498": 3638, + "4499": 3639, + "4500": 3639, + "4501": 3639, + "4502": 3640, + "4503": 3641, + "4504": 3642, + "4505": 3643, + "4506": 3643, + "4507": 3643, + "4508": 3644, + "4509": 3645, + "4510": 3646, + "4511": 3646, + "4512": 3650, + "4513": 3650, + "4514": 3651, + "4515": 3652, + "4516": 3652, + "4517": 3653, + "4518": 3653, + "4519": 3654, + "4520": 3655, + "4521": 3655, + "4522": 3656, + "4523": 3656, + "4524": 3657, + "4525": 3658, + "4526": 3659, + "4527": 3660, + "4528": 3661, + "4529": 3661, + "4530": 3662, + "4531": 3663, + "4532": 3664, + "4533": 3665, + "4534": 3666, + "4535": 3667, + "4536": 3668, + "4537": 3669, + "4538": 3670, + "4539": 3670, + "4540": 3670, + "4541": 3671, + "4542": 3671, + "4543": 3672, + "4544": 3673, + "4545": 3677, + "4546": 3677, + "4547": 3678, + "4548": 3679, + "4549": 3679, + "4550": 3680, + "4551": 3680, + "4552": 3681, + "4553": 3682, + "4554": 3682, + "4555": 3683, + "4556": 3683, + "4557": 3684, + "4558": 3685, + "4559": 3686, + "4560": 3687, + "4561": 3688, + "4562": 3688, + "4563": 3689, + "4564": 3690, + "4565": 3691, + "4566": 3692, + "4567": 3693, + "4568": 3694, + "4569": 3695, + "4570": 3696, + "4571": 3697, + "4572": 3697, + "4573": 3697, + "4574": 3698, + "4575": 3699, + "4576": 3700, + "4577": 3701, + "4578": 3701, + "4579": 3701, + "4580": 3702, + "4581": 3703, + "4582": 3704, + "4583": 3705, + "4584": 3706, + "4585": 3707, + "4586": 3708, + "4587": 3711, + "4588": 3711, + "4589": 3712, + "4590": 3713, + "4591": 3714, + "4592": 3714, + "4593": 3715, + "4594": 3716, + "4595": 3717, + "4596": 3718, + "4597": 3719, + "4598": 3720, + "4599": 3720, + "4600": 3720, + "4601": 3721, + "4602": 3722, + "4603": 3725, + "4604": 3725, + "4605": 3725, + "4606": 3729, + "4607": 3730, + "4608": 3731, + "4609": 3731, + "4610": 3732, + "4611": 3732, + "4612": 3733, + "4613": 3734, + "4614": 3734, + "4615": 3734, + "4616": 3735, + "4617": 3735, + "4618": 3735, + "4619": 3736, + "4620": 3737, + "4621": 3738, + "4622": 3738, + "4623": 3738, + "4624": 3739, + "4625": 3740, + "4626": 3741, + "4627": 3742, + "4628": 3742, + "4629": 3742, + "4630": 3743, + "4631": 3743, + "4632": 3744, + "4633": 3745, + "4634": 3746, + "4635": 3747, + "4636": 3747, + "4637": 3747, + "4638": 3748, + "4639": 3749, + "4640": 3750, + "4641": 3750, + "4642": 3750, + "4643": 3751, + "4644": 3751, + "4645": 3752, + "4646": 3753, + "4647": 3753, + "4648": 3753, + "4649": 3754, + "4650": 3755, + "4651": 3756, + "4652": 3757, + "4653": 3757, + "4654": 3757, + "4655": 3758, + "4656": 3758, + "4657": 3759, + "4658": 3760, + "4659": 3760, + "4660": 3760, + "4661": 3761, + "4662": 3762, + "4663": 3763, + "4664": 3764, + "4665": 3764, + "4666": 3764, + "4667": 3765, + "4668": 3766, + "4669": 3767, + "4670": 3767, + "4671": 3771, + "4672": 3771, + "4673": 3772, + "4674": 3773, + "4675": 3773, + "4676": 3774, + "4677": 3775, + "4678": 3775, + "4679": 3776, + "4680": 3777, + "4681": 3777, + "4682": 3777, + "4683": 3778, + "4684": 3779, + "4685": 3779, + "4686": 3783, + "4687": 3783, + "4688": 3784, + "4689": 3785, + "4690": 3785, + "4691": 3786, + "4692": 3787, + "4693": 3788, + "4694": 3788, + "4695": 3789, + "4696": 3789, + "4697": 3790, + "4698": 3791, + "4699": 3792, + "4700": 3793, + "4701": 3794, + "4702": 3794, + "4703": 3795, + "4704": 3796, + "4705": 3797, + "4706": 3798, + "4707": 3799, + "4708": 3800, + "4709": 3801, + "4710": 3802, + "4711": 3803, + "4712": 3804, + "4713": 3804, + "4714": 3805, + "4715": 3806, + "4716": 3806, + "4717": 3806, + "4718": 3807, + "4719": 3807, + "4720": 3808, + "4721": 3809, + "4722": 3809, + "4723": 3809, + "4724": 3810, + "4725": 3811, + "4726": 3812, + "4727": 3813, + "4728": 3814, + "4729": 3815, + "4730": 3815, + "4731": 3815, + "4732": 3816, + "4733": 3817, + "4734": 3817, + "4735": 3818, + "4736": 3818, + "4737": 3818, + "4738": 3819, + "4739": 3820, + "4740": 3820, + "4741": 3821, + "4742": 3821, + "4743": 3821, + "4744": 3822, + "4745": 3823, + "4746": 3823, + "4747": 3824, + "4748": 3824, + "4749": 3824, + "4750": 3825, + "4751": 3826, + "4752": 3826, + "4753": 3827, + "4754": 3827, + "4755": 3831, + "4756": 3831, + "4757": 3832, + "4758": 3833, + "4759": 3833, + "4760": 3834, + "4761": 3834, + "4762": 3835, + "4763": 3836, + "4764": 3836, + "4765": 3837, + "4766": 3837, + "4767": 3838, + "4768": 3839, + "4769": 3840, + "4770": 3841, + "4771": 3842, + "4772": 3842, + "4773": 3843, + "4774": 3844, + "4775": 3845, + "4776": 3846, + "4777": 3847, + "4778": 3848, + "4779": 3849, + "4780": 3850, + "4781": 3851, + "4782": 3852, + "4783": 3852, + "4784": 3853, + "4785": 3854, + "4786": 3855, + "4787": 3856, + "4788": 3856, + "4789": 3856, + "4790": 3857, + "4791": 3858, + "4792": 3859, + "4793": 3859, + "4794": 3860, + "4795": 3860, + "4796": 3860, + "4797": 3861, + "4798": 3862, + "4799": 3862, + "4800": 3863, + "4801": 3863, + "4802": 3863, + "4803": 3864, + "4804": 3865, + "4805": 3865, + "4806": 3866, + "4807": 3866, + "4808": 3866, + "4809": 3867, + "4810": 3868, + "4811": 3868, + "4812": 3869, + "4813": 3869, + "4814": 3873, + "4815": 3873, + "4816": 3874, + "4817": 3875, + "4818": 3875, + "4819": 3876, + "4820": 3876, + "4821": 3877, + "4822": 3878, + "4823": 3878, + "4824": 3879, + "4825": 3879, + "4826": 3880, + "4827": 3881, + "4828": 3882, + "4829": 3883, + "4830": 3884, + "4831": 3884, + "4832": 3885, + "4833": 3886, + "4834": 3887, + "4835": 3888, + "4836": 3889, + "4837": 3890, + "4838": 3891, + "4839": 3892, + "4840": 3893, + "4841": 3894, + "4842": 3894, + "4843": 3895, + "4844": 3896, + "4845": 3896, + "4846": 3896, + "4847": 3897, + "4848": 3897, + "4849": 3898, + "4850": 3899, + "4851": 3899, + "4852": 3899, + "4853": 3900, + "4854": 3901, + "4855": 3902, + "4856": 3903, + "4857": 3904, + "4858": 3904, + "4859": 3905, + "4860": 3905, + "4861": 3905, + "4862": 3906, + "4863": 3907, + "4864": 3907, + "4865": 3908, + "4866": 3908, + "4867": 3908, + "4868": 3909, + "4869": 3910, + "4870": 3910, + "4871": 3911, + "4872": 3911, + "4873": 3915, + "4874": 3915, + "4875": 3916, + "4876": 3917, + "4877": 3917, + "4878": 3918, + "4879": 3918, + "4880": 3919, + "4881": 3920, + "4882": 3920, + "4883": 3921, + "4884": 3921, + "4885": 3922, + "4886": 3923, + "4887": 3924, + "4888": 3925, + "4889": 3926, + "4890": 3926, + "4891": 3927, + "4892": 3928, + "4893": 3929, + "4894": 3930, + "4895": 3931, + "4896": 3932, + "4897": 3933, + "4898": 3934, + "4899": 3935, + "4900": 3936, + "4901": 3936, + "4902": 3937, + "4903": 3938, + "4904": 3938, + "4905": 3938, + "4906": 3939, + "4907": 3939, + "4908": 3940, + "4909": 3941, + "4910": 3941, + "4911": 3941, + "4912": 3942, + "4913": 3943, + "4914": 3944, + "4915": 3945, + "4916": 3946, + "4917": 3946, + "4918": 3947, + "4919": 3947, + "4920": 3947, + "4921": 3948, + "4922": 3949, + "4923": 3949, + "4924": 3950, + "4925": 3950, + "4926": 3954, + "4927": 3954, + "4928": 3955, + "4929": 3956, + "4930": 3957, + "4931": 3958, + "4932": 3959, + "4933": 3962, + "4934": 3962, + "4935": 3963, + "4936": 3964, + "4937": 3965, + "4938": 3965, + "4939": 3966, + "4940": 3967, + "4941": 3968, + "4942": 3969, + "4943": 3970, + "4944": 3971, + "4945": 3971, + "4946": 3971, + "4947": 3972, + "4948": 3973, + "4949": 3976, + "4950": 3976, + "4951": 3976, + "4952": 3980, + "4953": 3981, + "4954": 3982, + "4955": 3982, + "4956": 3983, + "4957": 3984, + "4958": 3985, + "4959": 3985, + "4960": 3985, + "4961": 3986, + "4962": 3987, + "4963": 3988, + "4964": 3989, + "4965": 3989, + "4966": 3989, + "4967": 3990, + "4968": 3991, + "4969": 3992, + "4970": 3992, + "4971": 3992, + "4972": 3993, + "4973": 3994, + "4974": 3995, + "4975": 3996, + "4976": 3996, + "4977": 3996, + "4978": 3997, + "4979": 3997, + "4980": 3998, + "4981": 3999, + "4982": 3999, + "4983": 3999, + "4984": 4000, + "4985": 4001, + "4986": 4002, + "4987": 4003, + "4988": 4003, + "4989": 4003, + "4990": 4004, + "4991": 4005, + "4992": 4006, + "4993": 4006, + "4994": 4010, + "4995": 4010, + "4996": 4011, + "4997": 4012, + "4998": 4012, + "4999": 4013, + "5000": 4014, + "5001": 4015, + "5002": 4015, + "5003": 4016, + "5004": 4016, + "5005": 4017, + "5006": 4018, + "5007": 4019, + "5008": 4020, + "5009": 4021, + "5010": 4021, + "5011": 4022, + "5012": 4023, + "5013": 4024, + "5014": 4025, + "5015": 4026, + "5016": 4027, + "5017": 4028, + "5018": 4029, + "5019": 4030, + "5020": 4031, + "5021": 4031, + "5022": 4032, + "5023": 4033, + "5024": 4033, + "5025": 4033, + "5026": 4034, + "5027": 4034, + "5028": 4035, + "5029": 4036, + "5030": 4036, + "5031": 4036, + "5032": 4037, + "5033": 4038, + "5034": 4039, + "5035": 4040, + "5036": 4041, + "5037": 4042, + "5038": 4042, + "5039": 4042, + "5040": 4043, + "5041": 4044, + "5042": 4045, + "5043": 4045, + "5044": 4045, + "5045": 4046, + "5046": 4047, + "5047": 4047, + "5048": 4048, + "5049": 4048, + "5050": 4048, + "5051": 4049, + "5052": 4050, + "5053": 4050, + "5054": 4051, + "5055": 4051, + "5056": 4055, + "5057": 4055, + "5058": 4056, + "5059": 4057, + "5060": 4057, + "5061": 4058, + "5062": 4059, + "5063": 4060, + "5064": 4060, + "5065": 4061, + "5066": 4061, + "5067": 4062, + "5068": 4063, + "5069": 4064, + "5070": 4065, + "5071": 4066, + "5072": 4066, + "5073": 4067, + "5074": 4068, + "5075": 4069, + "5076": 4070, + "5077": 4071, + "5078": 4072, + "5079": 4073, + "5080": 4074, + "5081": 4075, + "5082": 4076, + "5083": 4076, + "5084": 4077, + "5085": 4078, + "5086": 4078, + "5087": 4078, + "5088": 4079, + "5089": 4079, + "5090": 4080, + "5091": 4081, + "5092": 4081, + "5093": 4081, + "5094": 4082, + "5095": 4083, + "5096": 4084, + "5097": 4085, + "5098": 4086, + "5099": 4087, + "5100": 4087, + "5101": 4087, + "5102": 4088, + "5103": 4089, + "5104": 4089, + "5105": 4090, + "5106": 4090, + "5107": 4090, + "5108": 4091, + "5109": 4092, + "5110": 4092, + "5111": 4093, + "5112": 4093, + "5113": 4097, + "5114": 4097, + "5115": 4098, + "5116": 4099, + "5117": 4099, + "5118": 4100, + "5119": 4100, + "5120": 4101, + "5121": 4102, + "5122": 4102, + "5123": 4103, + "5124": 4103, + "5125": 4104, + "5126": 4105, + "5127": 4106, + "5128": 4107, + "5129": 4108, + "5130": 4108, + "5131": 4109, + "5132": 4110, + "5133": 4111, + "5134": 4112, + "5135": 4113, + "5136": 4114, + "5137": 4115, + "5138": 4116, + "5139": 4117, + "5140": 4118, + "5141": 4119, + "5142": 4120, + "5143": 4120, + "5144": 4120, + "5145": 4121, + "5146": 4121, + "5147": 4122, + "5148": 4123, + "5149": 4123, + "5150": 4123, + "5151": 4124, + "5152": 4125, + "5153": 4126, + "5154": 4127, + "5155": 4128, + "5156": 4128, + "5157": 4129, + "5158": 4129, + "5159": 4129, + "5160": 4130, + "5161": 4131, + "5162": 4131, + "5163": 4132, + "5164": 4132, + "5165": 4136, + "5166": 4136, + "5167": 4137, + "5168": 4138, + "5169": 4139, + "5170": 4140, + "5171": 4141, + "5172": 4144, + "5173": 4144, + "5174": 4145, + "5175": 4146, + "5176": 4147, + "5177": 4147, + "5178": 4148, + "5179": 4149, + "5180": 4150, + "5181": 4151, + "5182": 4152, + "5183": 4153, + "5184": 4153, + "5185": 4153, + "5186": 4154, + "5187": 4155, + "5188": 4158, + "5189": 4158, + "5190": 4158, + "5191": 4162, + "5192": 4163, + "5193": 4164, + "5194": 4164, + "5195": 4165, + "5196": 4166, + "5197": 4167, + "5198": 4167, + "5199": 4167, + "5200": 4168, + "5201": 4169, + "5202": 4170, + "5203": 4170, + "5204": 4170, + "5205": 4171, + "5206": 4172, + "5207": 4173, + "5208": 4174, + "5209": 4175, + "5210": 4175, + "5211": 4175, + "5212": 4176, + "5213": 4177, + "5214": 4178, + "5215": 4178, + "5216": 4178, + "5217": 4179, + "5218": 4179, + "5219": 4180, + "5220": 4181, + "5221": 4181, + "5222": 4181, + "5223": 4182, + "5224": 4183, + "5225": 4184, + "5226": 4185, + "5227": 4186, + "5228": 4186, + "5229": 4186, + "5230": 4187, + "5231": 4187, + "5232": 4188, + "5233": 4189, + "5234": 4189, + "5235": 4189, + "5236": 4190, + "5237": 4190, + "5238": 4191, + "5239": 4192, + "5240": 4192, + "5241": 4192, + "5242": 4193, + "5243": 4194, + "5244": 4195, + "5245": 4196, + "5246": 4197, + "5247": 4197, + "5248": 4197, + "5249": 4198, + "5250": 4199, + "5251": 4200, + "5252": 4200, + "5253": 4204, + "5254": 4204, + "5255": 4205, + "5256": 4206, + "5257": 4206, + "5258": 4207, + "5259": 4208, + "5260": 4209, + "5261": 4209, + "5262": 4210, + "5263": 4210, + "5264": 4211, + "5265": 4212, + "5266": 4213, + "5267": 4214, + "5268": 4215, + "5269": 4215, + "5270": 4216, + "5271": 4217, + "5272": 4218, + "5273": 4219, + "5274": 4220, + "5275": 4221, + "5276": 4222, + "5277": 4223, + "5278": 4224, + "5279": 4225, + "5280": 4225, + "5281": 4226, + "5282": 4227, + "5283": 4227, + "5284": 4227, + "5285": 4228, + "5286": 4229, + "5287": 4230, + "5288": 4231, + "5289": 4232, + "5290": 4232, + "5291": 4232, + "5292": 4233, + "5293": 4234, + "5294": 4235, + "5295": 4235, + "5296": 4235, + "5297": 4236, + "5298": 4237, + "5299": 4237, + "5300": 4238, + "5301": 4238, + "5302": 4238, + "5303": 4239, + "5304": 4240, + "5305": 4240, + "5306": 4241, + "5307": 4241, + "5308": 4245, + "5309": 4245, + "5310": 4246, + "5311": 4247, + "5312": 4247, + "5313": 4248, + "5314": 4249, + "5315": 4250, + "5316": 4250, + "5317": 4251, + "5318": 4251, + "5319": 4252, + "5320": 4253, + "5321": 4254, + "5322": 4255, + "5323": 4256, + "5324": 4256, + "5325": 4257, + "5326": 4258, + "5327": 4259, + "5328": 4260, + "5329": 4261, + "5330": 4262, + "5331": 4263, + "5332": 4264, + "5333": 4265, + "5334": 4266, + "5335": 4266, + "5336": 4267, + "5337": 4268, + "5338": 4268, + "5339": 4268, + "5340": 4269, + "5341": 4270, + "5342": 4271, + "5343": 4272, + "5344": 4273, + "5345": 4273, + "5346": 4273, + "5347": 4274, + "5348": 4275, + "5349": 4275, + "5350": 4276, + "5351": 4276, + "5352": 4276, + "5353": 4277, + "5354": 4278, + "5355": 4278, + "5356": 4279, + "5357": 4279, + "5358": 4283, + "5359": 4283, + "5360": 4284, + "5361": 4285, + "5362": 4285, + "5363": 4286, + "5364": 4286, + "5365": 4287, + "5366": 4288, + "5367": 4288, + "5368": 4289, + "5369": 4289, + "5370": 4290, + "5371": 4291, + "5372": 4292, + "5373": 4293, + "5374": 4294, + "5375": 4294, + "5376": 4295, + "5377": 4296, + "5378": 4297, + "5379": 4298, + "5380": 4299, + "5381": 4300, + "5382": 4301, + "5383": 4302, + "5384": 4303, + "5385": 4304, + "5386": 4304, + "5387": 4305, + "5388": 4306, + "5389": 4306, + "5390": 4306, + "5391": 4307, + "5392": 4308, + "5393": 4309, + "5394": 4310, + "5395": 4310, + "5396": 4311, + "5397": 4311, + "5398": 4311, + "5399": 4312, + "5400": 4313, + "5401": 4313, + "5402": 4314, + "5403": 4314, + "5404": 4318, + "5405": 4318, + "5406": 4319, + "5407": 4320, + "5408": 4321, + "5409": 4322, + "5410": 4323, + "5411": 4326, + "5412": 4326, + "5413": 4327, + "5414": 4328, + "5415": 4329, + "5416": 4329, + "5417": 4330, + "5418": 4331, + "5419": 4332, + "5420": 4333, + "5421": 4334, + "5422": 4335, + "5423": 4335, + "5424": 4335, + "5425": 4336, + "5426": 4337, + "5427": 4340, + "5428": 4340, + "5429": 4340, + "5430": 4344, + "5431": 4345, + "5432": 4346, + "5433": 4346, + "5434": 4347, + "5435": 4348, + "5436": 4349, + "5437": 4349, + "5438": 4349, + "5439": 4350, + "5440": 4350, + "5441": 4350, + "5442": 4351, + "5443": 4351, + "5444": 4352, + "5445": 4353, + "5446": 4354, + "5447": 4355, + "5448": 4355, + "5449": 4355, + "5450": 4356, + "5451": 4357, + "5452": 4358, + "5453": 4358, + "5454": 4358, + "5455": 4359, + "5456": 4360, + "5457": 4361, + "5458": 4361, + "5459": 4365, + "5460": 4365, + "5461": 4366, + "5462": 4367, + "5463": 4367, + "5464": 4368, + "5465": 4369, + "5466": 4370, + "5467": 4370, + "5468": 4371, + "5469": 4371, + "5470": 4372, + "5471": 4373, + "5472": 4374, + "5473": 4375, + "5474": 4376, + "5475": 4376, + "5476": 4377, + "5477": 4378, + "5478": 4379, + "5479": 4380, + "5480": 4381, + "5481": 4382, + "5482": 4383, + "5483": 4384, + "5484": 4385, + "5485": 4385, + "5486": 4385, + "5487": 4386, + "5488": 4387, + "5489": 4388, + "5490": 4389, + "5491": 4389, + "5492": 4389, + "5493": 4390, + "5494": 4391, + "5495": 4392, + "5496": 4393, + "5497": 4394, + "5498": 4395, + "5499": 4396, + "5500": 4399, + "5501": 4399, + "5502": 4400, + "5503": 4401, + "5504": 4402, + "5505": 4402, + "5506": 4403, + "5507": 4404, + "5508": 4405, + "5509": 4406, + "5510": 4407, + "5511": 4408, + "5512": 4408, + "5513": 4408, + "5514": 4409, + "5515": 4410, + "5516": 4413, + "5517": 4413, + "5518": 4413, + "5519": 4417, + "5520": 4418, + "5521": 4419, + "5522": 4419, + "5523": 4420, + "5524": 4421, + "5525": 4422, + "5526": 4422, + "5527": 4422, + "5528": 4423, + "5529": 4423, + "5530": 4423, + "5531": 4424, + "5532": 4424, + "5533": 4425, + "5534": 4426, + "5535": 4427, + "5536": 4428, + "5537": 4428, + "5538": 4428, + "5539": 4429, + "5540": 4430, + "5541": 4431, + "5542": 4431, + "5543": 4431, + "5544": 4432, + "5545": 4433, + "5546": 4434, + "5547": 4434, + "5548": 4438, + "5549": 4438, + "5550": 4439, + "5551": 4440, + "5552": 4440, + "5553": 4441, + "5554": 4442, + "5555": 4443, + "5556": 4443, + "5557": 4444, + "5558": 4444, + "5559": 4445, + "5560": 4446, + "5561": 4447, + "5562": 4448, + "5563": 4449, + "5564": 4449, + "5565": 4450, + "5566": 4451, + "5567": 4452, + "5568": 4453, + "5569": 4454, + "5570": 4455, + "5571": 4456, + "5572": 4457, + "5573": 4458, + "5574": 4459, + "5575": 4459, + "5576": 4460, + "5577": 4461, + "5578": 4462, + "5579": 4463, + "5580": 4463, + "5581": 4463, + "5582": 4464, + "5583": 4465, + "5584": 4466, + "5585": 4467, + "5586": 4467, + "5587": 4467, + "5588": 4468, + "5589": 4469, + "5590": 4469, + "5591": 4470, + "5592": 4470, + "5593": 4474, + "5594": 4474, + "5595": 4475, + "5596": 4476, + "5597": 4476, + "5598": 4477, + "5599": 4478, + "5600": 4479, + "5601": 4479, + "5602": 4480, + "5603": 4480, + "5604": 4481, + "5605": 4482, + "5606": 4483, + "5607": 4484, + "5608": 4485, + "5609": 4485, + "5610": 4486, + "5611": 4487, + "5612": 4488, + "5613": 4489, + "5614": 4490, + "5615": 4491, + "5616": 4492, + "5617": 4493, + "5618": 4494, + "5619": 4494, + "5620": 4494, + "5621": 4495, + "5622": 4496, + "5623": 4497, + "5624": 4498, + "5625": 4498, + "5626": 4498, + "5627": 4499, + "5628": 4500, + "5629": 4501, + "5630": 4502, + "5631": 4503, + "5632": 4504, + "5633": 4505, + "5634": 4508, + "5635": 4508, + "5636": 4509, + "5637": 4510, + "5638": 4511, + "5639": 4511, + "5640": 4512, + "5641": 4513, + "5642": 4514, + "5643": 4515, + "5644": 4516, + "5645": 4517, + "5646": 4517, + "5647": 4517, + "5648": 4518, + "5649": 4519, + "5650": 4522, + "5651": 4522, + "5652": 4522, + "5653": 4526, + "5654": 4527, + "5655": 4528, + "5656": 4528, + "5657": 4529, + "5658": 4530, + "5659": 4531, + "5660": 4531, + "5661": 4531, + "5662": 4532, + "5663": 4532, + "5664": 4532, + "5665": 4533, + "5666": 4533, + "5667": 4534, + "5668": 4535, + "5669": 4536, + "5670": 4537, + "5671": 4537, + "5672": 4537, + "5673": 4538, + "5674": 4539, + "5675": 4540, + "5676": 4540, + "5677": 4540, + "5678": 4541, + "5679": 4542, + "5680": 4543, + "5681": 4543, + "5682": 4547, + "5683": 4547, + "5684": 4548, + "5685": 4549, + "5686": 4549, + "5687": 4550, + "5688": 4551, + "5689": 4552, + "5690": 4552, + "5691": 4553, + "5692": 4553, + "5693": 4554, + "5694": 4555, + "5695": 4556, + "5696": 4557, + "5697": 4558, + "5698": 4558, + "5699": 4559, + "5700": 4560, + "5701": 4561, + "5702": 4562, + "5703": 4563, + "5704": 4564, + "5705": 4565, + "5706": 4566, + "5707": 4567, + "5708": 4568, + "5709": 4568, + "5710": 4569, + "5711": 4570, + "5712": 4571, + "5713": 4572, + "5714": 4572, + "5715": 4572, + "5716": 4573, + "5717": 4574, + "5718": 4575, + "5719": 4576, + "5720": 4576, + "5721": 4576, + "5722": 4577, + "5723": 4578, + "5724": 4578, + "5725": 4579, + "5726": 4579, + "5727": 4583, + "5728": 4583, + "5729": 4584, + "5730": 4585, + "5731": 4585, + "5732": 4586, + "5733": 4587, + "5734": 4588, + "5735": 4588, + "5736": 4589, + "5737": 4589, + "5738": 4590, + "5739": 4591, + "5740": 4592, + "5741": 4593, + "5742": 4594, + "5743": 4594, + "5744": 4595, + "5745": 4596, + "5746": 4597, + "5747": 4598, + "5748": 4599, + "5749": 4600, + "5750": 4601, + "5751": 4602, + "5752": 4603, + "5753": 4603, + "5754": 4603, + "5755": 4604, + "5756": 4605, + "5757": 4606, + "5758": 4607, + "5759": 4607, + "5760": 4607, + "5761": 4608, + "5762": 4609, + "5763": 4610, + "5764": 4611, + "5765": 4612, + "5766": 4613, + "5767": 4614, + "5768": 4617, + "5769": 4617, + "5770": 4618, + "5771": 4619, + "5772": 4620, + "5773": 4620, + "5774": 4621, + "5775": 4622, + "5776": 4623, + "5777": 4624, + "5778": 4625, + "5779": 4625, + "5780": 4625, + "5781": 4626, + "5782": 4626, + "5783": 4626, + "5784": 4627, + "5785": 4628, + "5786": 4631, + "5787": 4631, + "5788": 4631, + "5789": 4635, + "5790": 4635, + "5791": 4636, + "5792": 4637, + "5793": 4637, + "5794": 4638, + "5795": 4639, + "5796": 4640, + "5797": 4641, + "5798": 4642, + "5799": 4642, + "5800": 4643, + "5801": 4643, + "5802": 4644, + "5803": 4645, + "5804": 4646, + "5805": 4647, + "5806": 4648, + "5807": 4648, + "5808": 4649, + "5809": 4650, + "5810": 4651, + "5811": 4652, + "5812": 4653, + "5813": 4654, + "5814": 4655, + "5815": 4656, + "5816": 4657, + "5817": 4657, + "5818": 4657, + "5819": 4658, + "5820": 4659, + "5821": 4660, + "5822": 4661, + "5823": 4661, + "5824": 4661, + "5825": 4662, + "5826": 4663, + "5827": 4664, + "5828": 4665, + "5829": 4666, + "5830": 4667, + "5831": 4668, + "5832": 4671, + "5833": 4671, + "5834": 4672, + "5835": 4673, + "5836": 4674, + "5837": 4674, + "5838": 4675, + "5839": 4676, + "5840": 4677, + "5841": 4678, + "5842": 4679, + "5843": 4680, + "5844": 4680, + "5845": 4680, + "5846": 4681, + "5847": 4681, + "5848": 4681, + "5849": 4682, + "5850": 4683, + "5851": 4686, + "5852": 4686, + "5853": 4686, + "5854": 4690, + "5855": 4691, + "5856": 4691, + "5857": 4695, + "5858": 4695, + "5859": 4696, + "5860": 4697, + "5861": 4697, + "5862": 4698, + "5863": 4698, + "5864": 4699, + "5865": 4700, + "5866": 4701, + "5867": 4702, + "5868": 4702, + "5869": 4703, + "5870": 4703, + "5871": 4704, + "5872": 4705, + "5873": 4706, + "5874": 4707, + "5875": 4708, + "5876": 4708, + "5877": 4709, + "5878": 4710, + "5879": 4711, + "5880": 4712, + "5881": 4713, + "5882": 4714, + "5883": 4715, + "5884": 4716, + "5885": 4717, + "5886": 4717, + "5887": 4717, + "5888": 4718, + "5889": 4719, + "5890": 4720, + "5891": 4721, + "5892": 4721, + "5893": 4721, + "5894": 4722, + "5895": 4723, + "5896": 4724, + "5897": 4725, + "5898": 4726, + "5899": 4727, + "5900": 4728, + "5901": 4731, + "5902": 4731, + "5903": 4732, + "5904": 4733, + "5905": 4734, + "5906": 4734, + "5907": 4735, + "5908": 4736, + "5909": 4737, + "5910": 4738, + "5911": 4739, + "5912": 4740, + "5913": 4740, + "5914": 4740, + "5915": 4741, + "5916": 4742, + "5917": 4745, + "5918": 4745, + "5919": 4745, + "5920": 4749, + "5921": 4750, + "5922": 4751, + "5923": 4751, + "5924": 4752, + "5925": 4753, + "5926": 4754, + "5927": 4754, + "5928": 4754, + "5929": 4755, + "5930": 4755, + "5931": 4755, + "5932": 4756, + "5933": 4757, + "5934": 4758, + "5935": 4758, + "5936": 4758, + "5937": 4759, + "5938": 4760, + "5939": 4761, + "5940": 4762, + "5941": 4762, + "5942": 4762, + "5943": 4763, + "5944": 4763, + "5945": 4764, + "5946": 4765, + "5947": 4765, + "5948": 4765, + "5949": 4766, + "5950": 4766, + "5951": 4766, + "5952": 4767, + "5953": 4768, + "5954": 4769, + "5955": 4769, + "5956": 4773, + "5957": 4773, + "5958": 4774, + "5959": 4775, + "5960": 4776, + "5961": 4777, + "5962": 4778, + "5963": 4781, + "5964": 4781, + "5965": 4782, + "5966": 4783, + "5967": 4784, + "5968": 4784, + "5969": 4785, + "5970": 4786, + "5971": 4787, + "5972": 4788, + "5973": 4789, + "5974": 4790, + "5975": 4790, + "5976": 4790, + "5977": 4791, + "5978": 4792, + "5979": 4795, + "5980": 4795, + "5981": 4795, + "5982": 4799, + "5983": 4800, + "5984": 4801, + "5985": 4801, + "5986": 4802, + "5987": 4803, + "5988": 4804, + "5989": 4804, + "5990": 4804, + "5991": 4805, + "5992": 4805, + "5993": 4805, + "5994": 4806, + "5995": 4807, + "5996": 4808, + "5997": 4808, + "5998": 4808, + "5999": 4809, + "6000": 4810, + "6001": 4811, + "6002": 4812, + "6003": 4812, + "6004": 4812, + "6005": 4813, + "6006": 4813, + "6007": 4814, + "6008": 4815, + "6009": 4815, + "6010": 4815, + "6011": 4816, + "6012": 4816, + "6013": 4816, + "6014": 4817, + "6015": 4818, + "6016": 4819, + "6017": 4819, + "6018": 4823, + "6019": 4823, + "6020": 4824, + "6021": 4825, + "6022": 4825, + "6023": 4826, + "6024": 4827, + "6025": 4828, + "6026": 4828, + "6027": 4829, + "6028": 4829, + "6029": 4830, + "6030": 4831, + "6031": 4832, + "6032": 4833, + "6033": 4834, + "6034": 4834, + "6035": 4835, + "6036": 4836, + "6037": 4837, + "6038": 4838, + "6039": 4839, + "6040": 4840, + "6041": 4841, + "6042": 4842, + "6043": 4843, + "6044": 4844, + "6045": 4845, + "6046": 4846, + "6047": 4847, + "6048": 4850, + "6049": 4850, + "6050": 4851, + "6051": 4852, + "6052": 4853, + "6053": 4853, + "6054": 4854, + "6055": 4855, + "6056": 4856, + "6057": 4857, + "6058": 4858, + "6059": 4859, + "6060": 4859, + "6061": 4859, + "6062": 4860, + "6063": 4861, + "6064": 4864, + "6065": 4864, + "6066": 4864, + "6067": 4868, + "6068": 4869, + "6069": 4870, + "6070": 4870, + "6071": 4871, + "6072": 4871, + "6073": 4872, + "6074": 4873, + "6075": 4873, + "6076": 4873, + "6077": 4874, + "6078": 4874, + "6079": 4874, + "6080": 4875, + "6081": 4875, + "6082": 4876, + "6083": 4877, + "6084": 4877, + "6085": 4877, + "6086": 4878, + "6087": 4878, + "6088": 4879, + "6089": 4880, + "6090": 4880, + "6091": 4880, + "6092": 4881, + "6093": 4882, + "6094": 4882, + "6095": 4883, + "6096": 4884, + "6097": 4884, + "6098": 4884, + "6099": 4885, + "6100": 4886, + "6101": 4886, + "6102": 4887, + "6103": 4888, + "6104": 4889, + "6105": 4889, + "6106": 4889, + "6107": 4890, + "6108": 4891, + "6109": 4892, + "6110": 4892, + "6111": 4896, + "6112": 4896, + "6113": 4897, + "6114": 4898, + "6115": 4898, + "6116": 4899, + "6117": 4900, + "6118": 4901, + "6119": 4901, + "6120": 4902, + "6121": 4902, + "6122": 4903, + "6123": 4904, + "6124": 4905, + "6125": 4906, + "6126": 4907, + "6127": 4908, + "6128": 4909, + "6129": 4910, + "6130": 4911, + "6131": 4912, + "6132": 4913, + "6133": 4914, + "6134": 4914, + "6135": 4914, + "6136": 4914, + "6137": 4914, + "6138": 4914, + "6139": 4915, + "6140": 4916, + "6141": 4917, + "6142": 4918, + "6143": 4919, + "6144": 4920, + "6145": 4923, + "6146": 4923, + "6147": 4924, + "6148": 4925, + "6149": 4926, + "6150": 4926, + "6151": 4927, + "6152": 4928, + "6153": 4929, + "6154": 4930, + "6155": 4931, + "6156": 4932, + "6157": 4932, + "6158": 4932, + "6159": 4933, + "6160": 4934, + "6161": 4937, + "6162": 4937, + "6163": 4937, + "6164": 4941, + "6165": 4942, + "6166": 4943, + "6167": 4943, + "6168": 4944, + "6169": 4945, + "6170": 4946, + "6171": 4946, + "6172": 4946, + "6173": 4947, + "6174": 4947, + "6175": 4947, + "6176": 4948, + "6177": 4949, + "6178": 4950, + "6179": 4950, + "6180": 4950, + "6181": 4951, + "6182": 4952, + "6183": 4953, + "6184": 4954, + "6185": 4954, + "6186": 4954, + "6187": 4955, + "6188": 4955, + "6189": 4956, + "6190": 4957, + "6191": 4957, + "6192": 4957, + "6193": 4958, + "6194": 4958, + "6195": 4958, + "6196": 4959, + "6197": 4960, + "6198": 4961, + "6199": 4961, + "6200": 4965, + "6201": 4965, + "6202": 4966, + "6203": 4967, + "6204": 4967, + "6205": 4968, + "6206": 4969, + "6207": 4970, + "6208": 4970, + "6209": 4971, + "6210": 4971, + "6211": 4972, + "6212": 4973, + "6213": 4974, + "6214": 4975, + "6215": 4976, + "6216": 4976, + "6217": 4977, + "6218": 4978, + "6219": 4979, + "6220": 4980, + "6221": 4981, + "6222": 4982, + "6223": 4983, + "6224": 4984, + "6225": 4985, + "6226": 4986, + "6227": 4986, + "6228": 4987, + "6229": 4988, + "6230": 4988, + "6231": 4988, + "6232": 4989, + "6233": 4989, + "6234": 4990, + "6235": 4991, + "6236": 4991, + "6237": 4991, + "6238": 4992, + "6239": 4993, + "6240": 4994, + "6241": 4995, + "6242": 4996, + "6243": 4997, + "6244": 4997, + "6245": 4997, + "6246": 4998, + "6247": 4999, + "6248": 4999, + "6249": 5000, + "6250": 5000, + "6251": 5004, + "6252": 5004, + "6253": 5005, + "6254": 5006, + "6255": 5007, + "6256": 5008, + "6257": 5009, + "6258": 5012, + "6259": 5012, + "6260": 5013, + "6261": 5013, + "6262": 5013, + "6263": 5014, + "6264": 5014, + "6265": 5015, + "6266": 5016, + "6267": 5017, + "6268": 5017, + "6269": 5017, + "6270": 5018, + "6271": 5018, + "6272": 5019, + "6273": 5020, + "6274": 5021, + "6275": 5022, + "6276": 5022, + "6277": 5022, + "6278": 5022, + "6279": 5025, + "6280": 5025, + "6281": 5025, + "6282": 5025, + "6283": 5025, + "6284": 5025, + "6285": 5026, + "6286": 5026, + "6287": 5026, + "6288": 5026, + "6289": 5026, + "6290": 5026, + "6291": 5027, + "6292": 5027, + "6293": 5027, + "6294": 5027, + "6295": 5027, + "6296": 5027, + "6297": 5028, + "6298": 5028, + "6299": 5028, + "6300": 5028, + "6301": 5028, + "6302": 5028, + "6303": 5029, + "6304": 5029, + "6305": 5029, + "6306": 5029, + "6307": 5029, + "6308": 5029, + "6309": 5030, + "6310": 5030, + "6311": 5030, + "6312": 5030, + "6313": 5030, + "6314": 5030, + "6315": 5031, + "6316": 5031, + "6317": 5031, + "6318": 5031, + "6319": 5031, + "6320": 5031, + "6321": 5032, + "6322": 5032, + "6323": 5032, + "6324": 5032, + "6325": 5032, + "6326": 5032, + "6327": 5033, + "6328": 5033, + "6329": 5033, + "6330": 5033, + "6331": 5033, + "6332": 5033, + "6333": 5034, + "6334": 5034, + "6335": 5034, + "6336": 5034, + "6337": 5034, + "6338": 5034, + "6339": 5035, + "6340": 5035, + "6341": 5035, + "6342": 5035, + "6343": 5035, + "6344": 5035, + "6345": 5036, + "6346": 5036, + "6347": 5036, + "6348": 5036, + "6349": 5036, + "6350": 5036, + "6351": 5037, + "6352": 5037, + "6353": 5037, + "6354": 5037, + "6355": 5037, + "6356": 5037, + "6357": 5038, + "6358": 5038, + "6359": 5038, + "6360": 5038, + "6361": 5038, + "6362": 5038, + "6363": 5039, + "6364": 5039, + "6365": 5039, + "6366": 5039, + "6367": 5039, + "6368": 5039, + "6369": 5040, + "6370": 5040, + "6371": 5040, + "6372": 5040, + "6373": 5040, + "6374": 5040, + "6375": 5041, + "6376": 5041, + "6377": 5041, + "6378": 5041, + "6379": 5041, + "6380": 5041, + "6381": 5042, + "6382": 5042, + "6383": 5042, + "6384": 5042, + "6385": 5042, + "6386": 5042, + "6387": 5043, + "6388": 5043, + "6389": 5043, + "6390": 5043, + "6391": 5043, + "6392": 5043, + "6393": 5044, + "6394": 5044, + "6395": 5044, + "6396": 5044, + "6397": 5044, + "6398": 5044, + "6399": 5045, + "6400": 5045, + "6401": 5045, + "6402": 5045, + "6403": 5045, + "6404": 5045, + "6405": 5046, + "6406": 5046, + "6407": 5046, + "6408": 5046, + "6409": 5046, + "6410": 5046, + "6411": 5047, + "6412": 5047, + "6413": 5047, + "6414": 5047, + "6415": 5047, + "6416": 5047, + "6417": 5048, + "6418": 5048, + "6419": 5048, + "6420": 5048, + "6421": 5048, + "6422": 5048, + "6423": 5049, + "6424": 5049, + "6425": 5049, + "6426": 5049, + "6427": 5049, + "6428": 5049, + "6429": 5050, + "6430": 5050, + "6431": 5050, + "6432": 5050, + "6433": 5050, + "6434": 5050, + "6435": 5051, + "6436": 5051, + "6437": 5051, + "6438": 5051, + "6439": 5051, + "6440": 5051, + "6441": 5052, + "6442": 5052, + "6443": 5052, + "6444": 5052, + "6445": 5052, + "6446": 5052, + "6447": 5053, + "6448": 5053, + "6449": 5053, + "6450": 5053, + "6451": 5053, + "6452": 5053, + "6453": 5054, + "6454": 5054, + "6455": 5054, + "6456": 5054, + "6457": 5054, + "6458": 5054, + "6459": 5055, + "6460": 5055, + "6461": 5055, + "6462": 5055, + "6463": 5055, + "6464": 5055, + "6465": 5056, + "6466": 5056, + "6467": 5056, + "6468": 5056, + "6469": 5056, + "6470": 5056, + "6471": 5057, + "6472": 5057, + "6473": 5057, + "6474": 5057, + "6475": 5057, + "6476": 5057, + "6477": 5058, + "6478": 5058, + "6479": 5058, + "6480": 5058, + "6481": 5058, + "6482": 5058, + "6483": 5059, + "6484": 5059, + "6485": 5059, + "6486": 5059, + "6487": 5059, + "6488": 5059, + "6489": 5060, + "6490": 5060, + "6491": 5060, + "6492": 5060, + "6493": 5060, + "6494": 5060, + "6495": 5061, + "6496": 5061, + "6497": 5061, + "6498": 5061, + "6499": 5061, + "6500": 5061, + "6501": 5062, + "6502": 5062, + "6503": 5062, + "6504": 5062, + "6505": 5062, + "6506": 5062, + "6507": 5063, + "6508": 5063, + "6509": 5063, + "6510": 5063, "6511": 5063, - "6512": 5064, + "6512": 5063, "6513": 5064, - "6514": 5065, - "6515": 5065, - "6516": 5066, - "6517": 5066, - "6518": 5067, - "6519": 5068, - "6520": 5068, - "6521": 5069, - "6522": 5069, - "6523": 5070, - "6524": 5071, - "6525": 5072, - "6526": 5073, - "6527": 5073, - "6528": 5073, - "6529": 5074, - "6530": 5075, - "6531": 5076, - "6532": 5077, - "6533": 5078, - "6534": 5078, - "6535": 5079, - "6536": 5080, - "6537": 5081, - "6538": 5082, - "6539": 5082, - "6540": 5082, - "6541": 5083, - "6542": 5083, - "6543": 5084, - "6544": 5084, - "6545": 5085, - "6546": 5086, - "6547": 5087, - "6548": 5087, - "6549": 5088, - "6550": 5088, - "6551": 5089, - "6552": 5089, - "6553": 5090, - "6554": 5091, - "6555": 5091, - "6556": 5095, - "6557": 5095, - "6558": 5096, - "6559": 5097, - "6560": 5097, - "6561": 5098, - "6562": 5099, - "6563": 5100, - "6564": 5100, - "6565": 5101, - "6566": 5101, - "6567": 5102, - "6568": 5103, - "6569": 5104, - "6570": 5105, - "6571": 5106, - "6572": 5106, - "6573": 5107, - "6574": 5108, - "6575": 5109, - "6576": 5110, - "6577": 5111, - "6578": 5112, - "6579": 5113, - "6580": 5114, - "6581": 5115, - "6582": 5115, - "6583": 5116, - "6584": 5116, - "6585": 5117, - "6586": 5118, - "6587": 5118, - "6588": 5119, - "6589": 5120, - "6590": 5121, - "6591": 5122, - "6592": 5122, - "6593": 5122, - "6594": 5123, - "6595": 5124, - "6596": 5125, - "6597": 5126, - "6598": 5126, - "6599": 5126, - "6600": 5127, - "6601": 5128, - "6602": 5128, - "6603": 5129, - "6604": 5129, - "6605": 5133, - "6606": 5133, - "6607": 5134, - "6608": 5135, - "6609": 5135, - "6610": 5136, - "6611": 5137, - "6612": 5138, - "6613": 5138, - "6614": 5139, - "6615": 5139, - "6616": 5140, - "6617": 5141, - "6618": 5142, - "6619": 5143, - "6620": 5144, - "6621": 5144, - "6622": 5145, - "6623": 5146, - "6624": 5147, - "6625": 5148, - "6626": 5149, - "6627": 5150, - "6628": 5151, - "6629": 5152, - "6630": 5153, - "6631": 5153, - "6632": 5153, - "6633": 5154, - "6634": 5155, - "6635": 5156, - "6636": 5157, - "6637": 5157, - "6638": 5157, - "6639": 5158, - "6640": 5159, - "6641": 5160, - "6642": 5161, - "6643": 5162, - "6644": 5163, - "6645": 5164, - "6646": 5167, - "6647": 5167, - "6648": 5168, - "6649": 5169, - "6650": 5170, - "6651": 5170, - "6652": 5171, - "6653": 5172, - "6654": 5173, - "6655": 5174, - "6656": 5175, - "6657": 5176, - "6658": 5176, - "6659": 5176, - "6660": 5177, - "6661": 5178, - "6662": 5181, - "6663": 5181, - "6664": 5181, - "6665": 5185, - "6666": 5186, - "6667": 5187, - "6668": 5187, - "6669": 5188, - "6670": 5188, - "6671": 5189, - "6672": 5189, - "6673": 5190, - "6674": 5190, - "6675": 5191, - "6676": 5191, - "6677": 5192, - "6678": 5193, - "6679": 5194, - "6680": 5194, - "6681": 5194, - "6682": 5195, - "6683": 5196, - "6684": 5196, - "6685": 5197, - "6686": 5197, - "6687": 5198, - "6688": 5198, - "6689": 5199, - "6690": 5200, - "6691": 5200, - "6692": 5201, - "6693": 5201, - "6694": 5202, - "6695": 5203, - "6696": 5204, - "6697": 5205, - "6698": 5205, - "6699": 5205, - "6700": 5206, - "6701": 5207, - "6702": 5208, - "6703": 5209, - "6704": 5210, - "6705": 5210, - "6706": 5211, - "6707": 5212, - "6708": 5213, - "6709": 5214, - "6710": 5214, - "6711": 5214, - "6712": 5215, - "6713": 5215, - "6714": 5216, - "6715": 5216, - "6716": 5217, - "6717": 5218, - "6718": 5219, - "6719": 5219, - "6720": 5220, - "6721": 5220, - "6722": 5221, - "6723": 5221, - "6724": 5222, - "6725": 5223, - "6726": 5223, - "6727": 5227, - "6728": 5227, - "6729": 5228, - "6730": 5229, - "6731": 5229, - "6732": 5230, - "6733": 5231, - "6734": 5232, - "6735": 5232, - "6736": 5233, - "6737": 5233, - "6738": 5234, - "6739": 5235, - "6740": 5236, - "6741": 5237, - "6742": 5238, - "6743": 5238, - "6744": 5239, - "6745": 5240, - "6746": 5241, - "6747": 5242, - "6748": 5243, - "6749": 5244, - "6750": 5245, - "6751": 5246, - "6752": 5247, - "6753": 5247, - "6754": 5248, - "6755": 5248, - "6756": 5249, - "6757": 5250, - "6758": 5250, - "6759": 5251, - "6760": 5252, - "6761": 5253, - "6762": 5254, - "6763": 5254, - "6764": 5254, - "6765": 5255, - "6766": 5256, - "6767": 5257, - "6768": 5258, - "6769": 5258, - "6770": 5258, - "6771": 5259, - "6772": 5260, - "6773": 5260, - "6774": 5261, - "6775": 5261, - "6776": 5265, - "6777": 5265, - "6778": 5266, - "6779": 5267, - "6780": 5267, - "6781": 5268, - "6782": 5269, - "6783": 5270, - "6784": 5270, - "6785": 5271, - "6786": 5271, - "6787": 5272, - "6788": 5273, - "6789": 5274, - "6790": 5275, - "6791": 5276, - "6792": 5276, - "6793": 5277, - "6794": 5278, - "6795": 5279, - "6796": 5280, - "6797": 5281, - "6798": 5282, - "6799": 5283, - "6800": 5284, - "6801": 5285, - "6802": 5285, - "6803": 5285, - "6804": 5286, - "6805": 5287, - "6806": 5288, - "6807": 5289, - "6808": 5289, - "6809": 5289, - "6810": 5290, - "6811": 5291, - "6812": 5292, - "6813": 5293, - "6814": 5294, - "6815": 5295, - "6816": 5296, - "6817": 5299, - "6818": 5299, - "6819": 5300, - "6820": 5301, - "6821": 5302, - "6822": 5302, - "6823": 5303, - "6824": 5304, - "6825": 5305, - "6826": 5306, - "6827": 5307, - "6828": 5307, - "6829": 5307, - "6830": 5308, - "6831": 5308, - "6832": 5308, - "6833": 5309, - "6834": 5310, - "6835": 5313, - "6836": 5313, - "6837": 5313, - "6838": 5317, - "6839": 5317, - "6840": 5318, - "6841": 5319, - "6842": 5319, - "6843": 5320, - "6844": 5321, - "6845": 5322, - "6846": 5323, - "6847": 5324, - "6848": 5324, - "6849": 5325, - "6850": 5325, - "6851": 5326, - "6852": 5327, - "6853": 5328, - "6854": 5329, - "6855": 5330, - "6856": 5330, - "6857": 5331, - "6858": 5332, - "6859": 5333, - "6860": 5334, - "6861": 5335, - "6862": 5336, - "6863": 5337, - "6864": 5338, - "6865": 5339, - "6866": 5339, - "6867": 5339, - "6868": 5340, - "6869": 5341, - "6870": 5342, - "6871": 5343, - "6872": 5343, - "6873": 5343, - "6874": 5344, - "6875": 5345, - "6876": 5346, - "6877": 5347, - "6878": 5348, - "6879": 5349, - "6880": 5350, - "6881": 5353, - "6882": 5353, - "6883": 5354, - "6884": 5355, - "6885": 5356, - "6886": 5356, - "6887": 5357, - "6888": 5358, - "6889": 5359, - "6890": 5360, - "6891": 5361, - "6892": 5362, - "6893": 5362, - "6894": 5362, - "6895": 5363, - "6896": 5363, - "6897": 5363, - "6898": 5364, - "6899": 5365, - "6900": 5368, - "6901": 5368, - "6902": 5368, - "6903": 5372, - "6904": 5373, - "6905": 5373, - "6906": 5377, - "6907": 5377, - "6908": 5378, - "6909": 5379, - "6910": 5379, - "6911": 5380, - "6912": 5380, - "6913": 5381, - "6914": 5382, - "6915": 5383, - "6916": 5384, - "6917": 5384, - "6918": 5385, - "6919": 5385, - "6920": 5386, - "6921": 5387, - "6922": 5388, - "6923": 5389, - "6924": 5390, - "6925": 5390, - "6926": 5391, - "6927": 5392, - "6928": 5393, - "6929": 5394, - "6930": 5395, - "6931": 5396, - "6932": 5397, - "6933": 5398, - "6934": 5399, - "6935": 5399, - "6936": 5399, - "6937": 5400, - "6938": 5401, - "6939": 5402, - "6940": 5403, - "6941": 5403, - "6942": 5403, - "6943": 5404, - "6944": 5405, - "6945": 5406, - "6946": 5407, - "6947": 5408, - "6948": 5409, - "6949": 5410, - "6950": 5413, - "6951": 5413, - "6952": 5414, - "6953": 5415, - "6954": 5416, - "6955": 5416, - "6956": 5417, - "6957": 5418, - "6958": 5419, - "6959": 5420, - "6960": 5421, - "6961": 5422, - "6962": 5422, - "6963": 5422, - "6964": 5423, - "6965": 5424, - "6966": 5427, - "6967": 5427, - "6968": 5427, - "6969": 5431, - "6970": 5432, - "6971": 5433, - "6972": 5433, - "6973": 5434, - "6974": 5434, - "6975": 5435, - "6976": 5435, - "6977": 5436, - "6978": 5436, - "6979": 5437, - "6980": 5437, - "6981": 5438, - "6982": 5439, - "6983": 5440, - "6984": 5440, - "6985": 5440, - "6986": 5441, - "6987": 5442, - "6988": 5442, - "6989": 5443, - "6990": 5443, - "6991": 5444, - "6992": 5444, - "6993": 5445, - "6994": 5446, - "6995": 5446, - "6996": 5447, - "6997": 5448, - "6998": 5449, - "6999": 5449, - "7000": 5449, - "7001": 5450, - "7002": 5451, - "7003": 5452, - "7004": 5453, - "7005": 5454, - "7006": 5455, - "7007": 5455, - "7008": 5456, - "7009": 5457, - "7010": 5458, - "7011": 5459, - "7012": 5459, - "7013": 5459, - "7014": 5460, - "7015": 5460, - "7016": 5461, - "7017": 5461, - "7018": 5462, - "7019": 5463, - "7020": 5464, - "7021": 5464, - "7022": 5465, - "7023": 5465, - "7024": 5466, - "7025": 5466, - "7026": 5467, - "7027": 5468, - "7028": 5468, - "7029": 5468, - "7030": 5469, - "7031": 5470, - "7032": 5470, - "7033": 5471, - "7034": 5471, - "7035": 5472, - "7036": 5472, - "7037": 5473, - "7038": 5474, - "7039": 5474, - "7040": 5478, - "7041": 5478, - "7042": 5479, - "7043": 5480, - "7044": 5481, - "7045": 5482, - "7046": 5483, - "7047": 5486, - "7048": 5486, - "7049": 5487, - "7050": 5488, - "7051": 5489, - "7052": 5489, - "7053": 5490, - "7054": 5491, - "7055": 5492, - "7056": 5493, - "7057": 5494, - "7058": 5495, - "7059": 5495, - "7060": 5495, - "7061": 5496, - "7062": 5497, - "7063": 5500, - "7064": 5500, - "7065": 5500, - "7066": 5504, - "7067": 5505, - "7068": 5506, - "7069": 5506, - "7070": 5507, - "7071": 5507, - "7072": 5508, - "7073": 5508, - "7074": 5509, - "7075": 5509, - "7076": 5510, - "7077": 5510, - "7078": 5511, - "7079": 5512, - "7080": 5513, - "7081": 5513, - "7082": 5513, - "7083": 5514, - "7084": 5515, - "7085": 5515, - "7086": 5516, - "7087": 5516, - "7088": 5517, - "7089": 5517, - "7090": 5518, - "7091": 5519, - "7092": 5519, - "7093": 5520, - "7094": 5521, - "7095": 5522, - "7096": 5522, - "7097": 5522, - "7098": 5523, - "7099": 5524, - "7100": 5525, - "7101": 5526, - "7102": 5527, - "7103": 5528, - "7104": 5528, - "7105": 5529, - "7106": 5530, - "7107": 5531, - "7108": 5532, - "7109": 5532, - "7110": 5532, - "7111": 5533, - "7112": 5533, - "7113": 5534, - "7114": 5534, - "7115": 5535, - "7116": 5536, - "7117": 5537, - "7118": 5537, - "7119": 5538, - "7120": 5538, - "7121": 5539, - "7122": 5539, - "7123": 5540, - "7124": 5541, - "7125": 5541, - "7126": 5541, - "7127": 5542, - "7128": 5543, - "7129": 5543, - "7130": 5544, - "7131": 5544, - "7132": 5545, - "7133": 5545, - "7134": 5546, - "7135": 5547, - "7136": 5547, - "7137": 5551, - "7138": 5551, - "7139": 5552, - "7140": 5553, - "7141": 5553, - "7142": 5554, - "7143": 5555, - "7144": 5556, - "7145": 5556, - "7146": 5557, - "7147": 5557, - "7148": 5558, - "7149": 5559, - "7150": 5560, - "7151": 5561, - "7152": 5562, - "7153": 5562, - "7154": 5563, - "7155": 5564, - "7156": 5565, - "7157": 5566, - "7158": 5567, - "7159": 5568, - "7160": 5569, - "7161": 5570, - "7162": 5571, - "7163": 5572, - "7164": 5573, - "7165": 5574, - "7166": 5575, - "7167": 5578, - "7168": 5578, - "7169": 5579, - "7170": 5580, - "7171": 5581, - "7172": 5581, - "7173": 5582, - "7174": 5583, - "7175": 5584, - "7176": 5585, - "7177": 5586, - "7178": 5587, - "7179": 5587, - "7180": 5587, - "7181": 5588, - "7182": 5589, - "7183": 5592, - "7184": 5592, - "7185": 5592, - "7186": 5596, - "7187": 5597, - "7188": 5598, - "7189": 5598, - "7190": 5599, - "7191": 5599, - "7192": 5600, - "7193": 5600, - "7194": 5601, - "7195": 5601, - "7196": 5602, - "7197": 5602, - "7198": 5603, - "7199": 5603, - "7200": 5604, - "7201": 5605, - "7202": 5605, - "7203": 5605, - "7204": 5606, - "7205": 5607, - "7206": 5607, - "7207": 5608, - "7208": 5608, - "7209": 5609, - "7210": 5609, - "7211": 5610, - "7212": 5611, - "7213": 5611, - "7214": 5612, - "7215": 5612, - "7216": 5613, - "7217": 5614, - "7218": 5614, - "7219": 5614, - "7220": 5615, - "7221": 5615, - "7222": 5616, - "7223": 5617, - "7224": 5617, - "7225": 5617, - "7226": 5618, - "7227": 5619, - "7228": 5619, - "7229": 5620, - "7230": 5621, - "7231": 5621, - "7232": 5621, - "7233": 5622, - "7234": 5623, - "7235": 5623, - "7236": 5624, - "7237": 5625, - "7238": 5626, - "7239": 5627, - "7240": 5628, - "7241": 5628, - "7242": 5629, - "7243": 5630, - "7244": 5631, - "7245": 5632, - "7246": 5632, - "7247": 5632, - "7248": 5633, - "7249": 5633, - "7250": 5634, - "7251": 5634, - "7252": 5635, - "7253": 5636, - "7254": 5637, - "7255": 5637, - "7256": 5638, - "7257": 5638, - "7258": 5639, - "7259": 5639, - "7260": 5640, - "7261": 5641, - "7262": 5641, - "7263": 5645, - "7264": 5645, - "7265": 5646, - "7266": 5647, - "7267": 5647, - "7268": 5648, - "7269": 5649, - "7270": 5650, - "7271": 5650, - "7272": 5651, - "7273": 5651, - "7274": 5652, - "7275": 5653, - "7276": 5654, - "7277": 5655, - "7278": 5656, - "7279": 5657, - "7280": 5658, - "7281": 5659, - "7282": 5660, - "7283": 5661, - "7284": 5662, - "7285": 5663, - "7286": 5663, - "7287": 5663, - "7288": 5663, - "7289": 5663, - "7290": 5663, - "7291": 5664, - "7292": 5665, - "7293": 5666, - "7294": 5667, - "7295": 5668, - "7296": 5669, - "7297": 5672, - "7298": 5672, - "7299": 5673, - "7300": 5674, - "7301": 5675, - "7302": 5675, - "7303": 5676, - "7304": 5677, - "7305": 5678, - "7306": 5679, - "7307": 5680, - "7308": 5681, - "7309": 5681, - "7310": 5681, - "7311": 5682, - "7312": 5683, - "7313": 5686, - "7314": 5686, - "7315": 5686, - "7316": 5690, - "7317": 5691, - "7318": 5692, - "7319": 5692, - "7320": 5693, - "7321": 5693, - "7322": 5694, - "7323": 5694, - "7324": 5695, - "7325": 5695, - "7326": 5696, - "7327": 5696, - "7328": 5697, - "7329": 5698, - "7330": 5699, - "7331": 5699, - "7332": 5699, - "7333": 5700, - "7334": 5701, - "7335": 5701, - "7336": 5702, - "7337": 5702, - "7338": 5703, - "7339": 5703, - "7340": 5704, - "7341": 5705, - "7342": 5705, - "7343": 5706, - "7344": 5707, - "7345": 5708, - "7346": 5708, - "7347": 5708, - "7348": 5709, - "7349": 5710, - "7350": 5711, - "7351": 5712, - "7352": 5713, - "7353": 5714, - "7354": 5714, - "7355": 5715, - "7356": 5716, - "7357": 5717, - "7358": 5718, - "7359": 5718, - "7360": 5718, - "7361": 5719, - "7362": 5719, - "7363": 5720, - "7364": 5720, - "7365": 5721, - "7366": 5722, - "7367": 5723, - "7368": 5723, - "7369": 5724, - "7370": 5724, - "7371": 5725, - "7372": 5725, - "7373": 5726, - "7374": 5727, - "7375": 5727, - "7376": 5727, - "7377": 5728, - "7378": 5729, - "7379": 5729, - "7380": 5730, - "7381": 5730, - "7382": 5731, - "7383": 5731, - "7384": 5732, - "7385": 5733, - "7386": 5733, - "7387": 5737, - "7388": 5737, - "7389": 5738, - "7390": 5739, - "7391": 5739, - "7392": 5740, - "7393": 5741, - "7394": 5742, - "7395": 5742, - "7396": 5743, - "7397": 5743, - "7398": 5744, - "7399": 5745, - "7400": 5746, - "7401": 5747, - "7402": 5748, - "7403": 5748, - "7404": 5749, - "7405": 5750, - "7406": 5751, - "7407": 5752, - "7408": 5753, - "7409": 5754, - "7410": 5755, - "7411": 5756, - "7412": 5757, - "7413": 5757, - "7414": 5758, - "7415": 5758, - "7416": 5759, - "7417": 5760, - "7418": 5760, - "7419": 5761, - "7420": 5762, - "7421": 5762, - "7422": 5762, - "7423": 5763, - "7424": 5763, - "7425": 5764, - "7426": 5765, - "7427": 5765, - "7428": 5765, - "7429": 5766, - "7430": 5767, - "7431": 5768, - "7432": 5769, - "7433": 5770, - "7434": 5771, - "7435": 5771, - "7436": 5771, - "7437": 5772, - "7438": 5773, - "7439": 5773, - "7440": 5774, - "7441": 5774, - "7442": 5778, - "7443": 5778, - "7444": 5779, - "7445": 5780, - "7446": 5781, - "7447": 5782, - "7448": 5783, - "7449": 5786, - "7450": 5786, - "7451": 5787, - "7452": 5787, - "7453": 5787, - "7454": 5788, - "7455": 5788, - "7456": 5789, - "7457": 5790, - "7458": 5791, - "7459": 5791, - "7460": 5791, - "7461": 5792, - "7462": 5792, - "7463": 5793, - "7464": 5794, - "7465": 5795, - "7466": 5796, - "7467": 5796, - "7468": 5796, - "7469": 5796, - "7470": 5799, - "7471": 5799, - "7472": 5799, - "7473": 5799, - "7474": 5799, - "7475": 5799, - "7476": 5800, - "7477": 5800, - "7478": 5800, - "7479": 5800, - "7480": 5800, - "7481": 5800, - "7482": 5801, - "7483": 5801, - "7484": 5801, - "7485": 5801, - "7486": 5801, - "7487": 5801, - "7488": 5802, - "7489": 5802, - "7490": 5802, - "7491": 5802, - "7492": 5802, - "7493": 5802, - "7494": 5803, - "7495": 5803, - "7496": 5803, - "7497": 5803, - "7498": 5803, - "7499": 5803, - "7500": 5804, - "7501": 5804, - "7502": 5804, - "7503": 5804, - "7504": 5804, - "7505": 5804, - "7506": 5805, - "7507": 5805, - "7508": 5805, - "7509": 5805, - "7510": 5805, - "7511": 5805, - "7512": 5806, - "7513": 5806, - "7514": 5806, - "7515": 5806, - "7516": 5806, - "7517": 5806, - "7518": 5807, - "7519": 5807, - "7520": 5807, - "7521": 5807, - "7522": 5807, - "7523": 5807, - "7524": 5808, - "7525": 5808, - "7526": 5808, - "7527": 5808, - "7528": 5808, - "7529": 5808, - "7530": 5809, - "7531": 5809, - "7532": 5809, - "7533": 5809, - "7534": 5809, - "7535": 5809, - "7536": 5810, - "7537": 5810, - "7538": 5810, - "7539": 5810, - "7540": 5810, - "7541": 5810, - "7542": 5811, - "7543": 5811, - "7544": 5811, - "7545": 5811, - "7546": 5811, - "7547": 5811, - "7548": 5812, - "7549": 5812, - "7550": 5812, - "7551": 5812, - "7552": 5812, - "7553": 5812, - "7554": 5813, - "7555": 5813, - "7556": 5813, - "7557": 5813, - "7558": 5813, - "7559": 5813, - "7560": 5814, - "7561": 5814, - "7562": 5814, - "7563": 5814, - "7564": 5814, - "7565": 5814, - "7566": 5815, - "7567": 5815, - "7568": 5815, - "7569": 5815, - "7570": 5815, - "7571": 5815, - "7572": 5816, - "7573": 5816, - "7574": 5816, - "7575": 5816, - "7576": 5816, - "7577": 5816, - "7578": 5817, - "7579": 5817, - "7580": 5817, - "7581": 5817, - "7582": 5817, - "7583": 5817, - "7584": 5818, - "7585": 5818, - "7586": 5818, - "7587": 5818, - "7588": 5818, - "7589": 5818, - "7590": 5819, - "7591": 5819, - "7592": 5819, - "7593": 5819, - "7594": 5819, - "7595": 5819, - "7596": 5820, - "7597": 5820, - "7598": 5820, - "7599": 5820, - "7600": 5820, - "7601": 5820, - "7602": 5821, - "7603": 5821, - "7604": 5821, - "7605": 5821, - "7606": 5821, - "7607": 5821, - "7608": 5822, - "7609": 5822, - "7610": 5822, - "7611": 5822, - "7612": 5822, - "7613": 5822, - "7614": 5823, - "7615": 5823, - "7616": 5823, - "7617": 5823, - "7618": 5823, - "7619": 5823, - "7620": 5824, - "7621": 5824, - "7622": 5824, - "7623": 5824, - "7624": 5824, - "7625": 5824, - "7626": 5825, - "7627": 5825, - "7628": 5825, - "7629": 5825, - "7630": 5825, - "7631": 5825, - "7632": 5826, - "7633": 5826, - "7634": 5826, - "7635": 5826, - "7636": 5826, - "7637": 5826, - "7638": 5827, - "7639": 5827, - "7640": 5827, - "7641": 5827, - "7642": 5827, - "7643": 5827, - "7644": 5828, - "7645": 5828, - "7646": 5828, - "7647": 5828, - "7648": 5828, - "7649": 5828, - "7650": 5829, - "7651": 5829, - "7652": 5829, - "7653": 5829, - "7654": 5829, - "7655": 5829, - "7656": 5830, - "7657": 5830, - "7658": 5830, - "7659": 5830, - "7660": 5830, - "7661": 5830, - "7662": 5831, - "7663": 5831, - "7664": 5831, - "7665": 5831, - "7666": 5831, - "7667": 5831, - "7668": 5832, - "7669": 5832, - "7670": 5832, - "7671": 5832, - "7672": 5832, - "7673": 5832, - "7674": 5833, - "7675": 5833, - "7676": 5833, - "7677": 5833, - "7678": 5833, - "7679": 5833, - "7680": 5834, - "7681": 5834, - "7682": 5834, - "7683": 5834, - "7684": 5834, - "7685": 5834, - "7686": 5835, - "7687": 5835, - "7688": 5835, - "7689": 5835, - "7690": 5835, - "7691": 5835, - "7692": 5836, - "7693": 5836, - "7694": 5836, - "7695": 5836, - "7696": 5836, - "7697": 5836, - "7698": 5837, - "7699": 5837, - "7700": 5837, - "7701": 5837, - "7702": 5837, - "7703": 5837, - "7704": 5838, - "7705": 5838, - "7706": 5838, - "7707": 5838, - "7708": 5838, - "7709": 5838, - "7710": 5839, - "7711": 5839, - "7712": 5839, - "7713": 5839, - "7714": 5839, - "7715": 5839, - "7716": 5840, - "7717": 5840, - "7718": 5840, - "7719": 5840, - "7720": 5840, - "7721": 5840, - "7722": 5841, - "7723": 5841, - "7724": 5841, - "7725": 5841, - "7726": 5841, - "7727": 5841, - "7728": 5842, - "7729": 5842, - "7730": 5842, - "7731": 5842, - "7732": 5842, - "7733": 5842, - "7734": 5843, - "7735": 5843, - "7736": 5843, - "7737": 5843, - "7738": 5843, - "7739": 5843, - "7740": 5844, - "7741": 5844, - "7742": 5844, - "7743": 5844, - "7744": 5844, - "7745": 5844, - "7746": 5845, - "7747": 5845, - "7748": 5845, - "7749": 5845, - "7750": 5845, - "7751": 5845, - "7752": 5846, - "7753": 5846, - "7754": 5846, - "7755": 5846, - "7756": 5846, - "7757": 5846, - "7758": 5847, - "7759": 5847, - "7760": 5847, - "7761": 5847, - "7762": 5847, - "7763": 5847, - "7764": 5848, - "7765": 5848, - "7766": 5848, - "7767": 5848, - "7768": 5848, - "7769": 5848, - "7770": 5849, - "7771": 5849, - "7772": 5849, - "7773": 5849, - "7774": 5849, - "7775": 5849, - "7776": 5850, - "7777": 5850, - "7778": 5850, - "7779": 5850, - "7780": 5850, - "7781": 5850, - "7782": 5851, - "7783": 5851, - "7784": 5851, - "7785": 5851, - "7786": 5851, - "7787": 5851, - "7788": 5852, - "7789": 5852, - "7790": 5852, - "7791": 5852, - "7792": 5852, - "7793": 5852, - "7794": 5853, - "7795": 5853, - "7796": 5853, - "7797": 5853, - "7798": 5853, - "7799": 5853, - "7800": 5854, - "7801": 5854, - "7802": 5854, - "7803": 5854, - "7804": 5854, - "7805": 5854, - "7806": 5855, - "7807": 5855, - "7808": 5855, - "7809": 5855, - "7810": 5855, - "7811": 5855, - "7812": 5856, - "7813": 5856, - "7814": 5856, - "7815": 5856, - "7816": 5856, - "7817": 5856, - "7818": 5857, - "7819": 5857, - "7820": 5857, - "7821": 5858 + "6514": 5064, + "6515": 5064, + "6516": 5064, + "6517": 5064, + "6518": 5064, + "6519": 5065, + "6520": 5065, + "6521": 5065, + "6522": 5065, + "6523": 5065, + "6524": 5065, + "6525": 5066, + "6526": 5066, + "6527": 5066, + "6528": 5066, + "6529": 5066, + "6530": 5066, + "6531": 5067, + "6532": 5067, + "6533": 5067, + "6534": 5067, + "6535": 5067, + "6536": 5067, + "6537": 5068, + "6538": 5068, + "6539": 5068, + "6540": 5068, + "6541": 5068, + "6542": 5068, + "6543": 5069, + "6544": 5069, + "6545": 5069, + "6546": 5069, + "6547": 5069, + "6548": 5069, + "6549": 5070, + "6550": 5070, + "6551": 5070, + "6552": 5070, + "6553": 5070, + "6554": 5070, + "6555": 5071, + "6556": 5071, + "6557": 5071, + "6558": 5071, + "6559": 5071, + "6560": 5071, + "6561": 5072, + "6562": 5072, + "6563": 5072, + "6564": 5072, + "6565": 5072, + "6566": 5072, + "6567": 5073, + "6568": 5073, + "6569": 5073, + "6570": 5073, + "6571": 5073, + "6572": 5073, + "6573": 5074, + "6574": 5074, + "6575": 5074, + "6576": 5074, + "6577": 5074, + "6578": 5074, + "6579": 5075, + "6580": 5075, + "6581": 5075, + "6582": 5075, + "6583": 5075, + "6584": 5075, + "6585": 5076, + "6586": 5076, + "6587": 5076, + "6588": 5076, + "6589": 5076, + "6590": 5076, + "6591": 5077, + "6592": 5077, + "6593": 5077, + "6594": 5077, + "6595": 5077, + "6596": 5077, + "6597": 5078, + "6598": 5078, + "6599": 5078, + "6600": 5078, + "6601": 5078, + "6602": 5078, + "6603": 5079, + "6604": 5079, + "6605": 5079, + "6606": 5079, + "6607": 5079, + "6608": 5079, + "6609": 5080, + "6610": 5080, + "6611": 5080, + "6612": 5080, + "6613": 5080, + "6614": 5080, + "6615": 5081, + "6616": 5081, + "6617": 5081, + "6618": 5081, + "6619": 5081, + "6620": 5081, + "6621": 5082, + "6622": 5082, + "6623": 5082, + "6624": 5082, + "6625": 5082, + "6626": 5082, + "6627": 5083, + "6628": 5083, + "6629": 5083, + "6630": 5084 } \ No newline at end of file diff --git a/tests/contracts/AccountTest.json b/tests/contracts/AccountTest.json index 9ecc715f1..2211ffe39 100644 --- a/tests/contracts/AccountTest.json +++ b/tests/contracts/AccountTest.json @@ -1 +1,355 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX2hhc0Fzc2V0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBoYXNBc3NldAoJaW50IDEKCXJldHVybgoKaGFzQXNzZXQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWNjb3VudC5hbGdvLnRzOjYKCS8vIGFzc2VydChhLmhhc0Fzc2V0KG5ldyBBc3NldCgxMjMpKSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglpbnQgMTIzCglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldEJhbGFuY2U6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGFzc2V0QmFsYW5jZQoJaW50IDEKCXJldHVybgoKYXNzZXRCYWxhbmNlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czoxMAoJLy8gYXNzZXJ0KGEuYXNzZXRCYWxhbmNlKG5ldyBBc3NldCgxMjMpKSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglpbnQgMTIzCglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldEZyb3plbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgYXNzZXRGcm96ZW4KCWludCAxCglyZXR1cm4KCmFzc2V0RnJvemVuOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czoxNAoJLy8gYXNzZXJ0KGEuYXNzZXRGcm96ZW4obmV3IEFzc2V0KDEyMykpKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWludCAxMjMKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0RnJvemVuCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfaGFzQmFsYW5jZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgaGFzQmFsYW5jZQoJaW50IDEKCXJldHVybgoKaGFzQmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MTgKCS8vIGFzc2VydChhLmhhc0JhbGFuY2UpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfYmFsYW5jZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgYmFsYW5jZQoJaW50IDEKCXJldHVybgoKYmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MjIKCS8vIGFzc2VydChhLmJhbGFuY2UpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfbWluQmFsYW5jZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbWluQmFsYW5jZQoJaW50IDEKCXJldHVybgoKbWluQmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MjYKCS8vIGFzc2VydChhLm1pbkJhbGFuY2UpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfYXV0aEFkZHI6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGF1dGhBZGRyCglpbnQgMQoJcmV0dXJuCgphdXRoQWRkcjoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MzAKCS8vIGxvZyhhLmF1dGhBZGRyKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKCWFzc2VydAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90b3RhbE51bVVpbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHRvdGFsTnVtVWludAoJaW50IDEKCXJldHVybgoKdG90YWxOdW1VaW50OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czozNAoJLy8gYXNzZXJ0KGEudG90YWxOdW1VaW50KQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50Cglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxOdW1CeXRlU2xpY2U6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHRvdGFsTnVtQnl0ZVNsaWNlCglpbnQgMQoJcmV0dXJuCgp0b3RhbE51bUJ5dGVTbGljZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MzgKCS8vIGFzc2VydChhLnRvdGFsTnVtQnl0ZVNsaWNlKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKCWFzc2VydAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV90b3RhbEV4dHJhQXBwUGFnZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHRvdGFsRXh0cmFBcHBQYWdlcwoJaW50IDEKCXJldHVybgoKdG90YWxFeHRyYUFwcFBhZ2VzOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czo0MgoJLy8gYXNzZXJ0KGEudG90YWxFeHRyYUFwcFBhZ2VzKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxBcHBzQ3JlYXRlZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxBcHBzQ3JlYXRlZAoJaW50IDEKCXJldHVybgoKdG90YWxBcHBzQ3JlYXRlZDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NDYKCS8vIGFzc2VydChhLnRvdGFsQXBwc0NyZWF0ZWQpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxBcHBzT3B0ZWRJbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxBcHBzT3B0ZWRJbgoJaW50IDEKCXJldHVybgoKdG90YWxBcHBzT3B0ZWRJbjoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NTAKCS8vIGFzc2VydChhLnRvdGFsQXBwc09wdGVkSW4pCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxBc3NldHNDcmVhdGVkOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiB0b3RhbEFzc2V0c0NyZWF0ZWQKCWludCAxCglyZXR1cm4KCnRvdGFsQXNzZXRzQ3JlYXRlZDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NTQKCS8vIGFzc2VydChhLnRvdGFsQXNzZXRzQ3JlYXRlZCkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAoJYXNzZXJ0Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX3RvdGFsQXNzZXRzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiB0b3RhbEFzc2V0cwoJaW50IDEKCXJldHVybgoKdG90YWxBc3NldHM6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWNjb3VudC5hbGdvLnRzOjU4CgkvLyBhc3NlcnQoYS50b3RhbEFzc2V0cykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxCb3hlczoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxCb3hlcwoJaW50IDEKCXJldHVybgoKdG90YWxCb3hlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NjIKCS8vIGFzc2VydChhLnRvdGFsQm94ZXMpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxCb3hCeXRlczoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxCb3hCeXRlcwoJaW50IDEKCXJldHVybgoKdG90YWxCb3hCeXRlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NjYKCS8vIGFzc2VydChhLnRvdGFsQm94Qnl0ZXMpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiaGFzQXNzZXQoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJhc3NldEJhbGFuY2UoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJhc3NldEZyb3plbihhY2NvdW50KXZvaWQiCgltZXRob2QgImhhc0JhbGFuY2UoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJiYWxhbmNlKGFjY291bnQpdm9pZCIKCW1ldGhvZCAibWluQmFsYW5jZShhY2NvdW50KXZvaWQiCgltZXRob2QgImF1dGhBZGRyKGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxOdW1VaW50KGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxOdW1CeXRlU2xpY2UoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJ0b3RhbEV4dHJhQXBwUGFnZXMoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJ0b3RhbEFwcHNDcmVhdGVkKGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxBcHBzT3B0ZWRJbihhY2NvdW50KXZvaWQiCgltZXRob2QgInRvdGFsQXNzZXRzQ3JlYXRlZChhY2NvdW50KXZvaWQiCgltZXRob2QgInRvdGFsQXNzZXRzKGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxCb3hlcyhhY2NvdW50KXZvaWQiCgltZXRob2QgInRvdGFsQm94Qnl0ZXMoYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2hhc0Fzc2V0IGFiaV9yb3V0ZV9hc3NldEJhbGFuY2UgYWJpX3JvdXRlX2Fzc2V0RnJvemVuIGFiaV9yb3V0ZV9oYXNCYWxhbmNlIGFiaV9yb3V0ZV9iYWxhbmNlIGFiaV9yb3V0ZV9taW5CYWxhbmNlIGFiaV9yb3V0ZV9hdXRoQWRkciBhYmlfcm91dGVfdG90YWxOdW1VaW50IGFiaV9yb3V0ZV90b3RhbE51bUJ5dGVTbGljZSBhYmlfcm91dGVfdG90YWxFeHRyYUFwcFBhZ2VzIGFiaV9yb3V0ZV90b3RhbEFwcHNDcmVhdGVkIGFiaV9yb3V0ZV90b3RhbEFwcHNPcHRlZEluIGFiaV9yb3V0ZV90b3RhbEFzc2V0c0NyZWF0ZWQgYWJpX3JvdXRlX3RvdGFsQXNzZXRzIGFiaV9yb3V0ZV90b3RhbEJveGVzIGFiaV9yb3V0ZV90b3RhbEJveEJ5dGVz","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"AccountTest","desc":"","methods":[{"name":"hasAsset","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"assetBalance","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"assetFrozen","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"hasBalance","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"balance","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"minBalance","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"authAddr","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalNumUint","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalNumByteSlice","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalExtraAppPages","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalAppsCreated","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalAppsOptedIn","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalAssetsCreated","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalAssets","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalBoxes","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"totalBoxBytes","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "hasAsset(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "assetBalance(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "assetFrozen(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "hasBalance(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "balance(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "minBalance(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "authAddr(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalNumUint(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalNumByteSlice(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalExtraAppPages(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalAppsCreated(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalAppsOptedIn(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalAssetsCreated(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalAssets(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalBoxes(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "totalBoxBytes(account)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX2hhc0Fzc2V0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBoYXNBc3NldAoJaW50IDEKCXJldHVybgoKaGFzQXNzZXQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWNjb3VudC5hbGdvLnRzOjYKCS8vIGFzc2VydChhLmhhc0Fzc2V0KG5ldyBBc3NldCgxMjMpKSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglpbnQgMTIzCglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldEJhbGFuY2U6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGFzc2V0QmFsYW5jZQoJaW50IDEKCXJldHVybgoKYXNzZXRCYWxhbmNlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czoxMAoJLy8gYXNzZXJ0KGEuYXNzZXRCYWxhbmNlKG5ldyBBc3NldCgxMjMpKSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglpbnQgMTIzCglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCWFzc2VydAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldEZyb3plbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgYXNzZXRGcm96ZW4KCWludCAxCglyZXR1cm4KCmFzc2V0RnJvemVuOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czoxNAoJLy8gYXNzZXJ0KGEuYXNzZXRGcm96ZW4obmV3IEFzc2V0KDEyMykpKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWludCAxMjMKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0RnJvemVuCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfaGFzQmFsYW5jZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgaGFzQmFsYW5jZQoJaW50IDEKCXJldHVybgoKaGFzQmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MTgKCS8vIGFzc2VydChhLmhhc0JhbGFuY2UpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfYmFsYW5jZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgYmFsYW5jZQoJaW50IDEKCXJldHVybgoKYmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MjIKCS8vIGFzc2VydChhLmJhbGFuY2UpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfbWluQmFsYW5jZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbWluQmFsYW5jZQoJaW50IDEKCXJldHVybgoKbWluQmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MjYKCS8vIGFzc2VydChhLm1pbkJhbGFuY2UpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfYXV0aEFkZHI6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGF1dGhBZGRyCglpbnQgMQoJcmV0dXJuCgphdXRoQWRkcjoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MzAKCS8vIGxvZyhhLmF1dGhBZGRyKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKCWFzc2VydAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90b3RhbE51bVVpbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHRvdGFsTnVtVWludAoJaW50IDEKCXJldHVybgoKdG90YWxOdW1VaW50OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czozNAoJLy8gYXNzZXJ0KGEudG90YWxOdW1VaW50KQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1VaW50Cglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxOdW1CeXRlU2xpY2U6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHRvdGFsTnVtQnl0ZVNsaWNlCglpbnQgMQoJcmV0dXJuCgp0b3RhbE51bUJ5dGVTbGljZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6MzgKCS8vIGFzc2VydChhLnRvdGFsTnVtQnl0ZVNsaWNlKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKCWFzc2VydAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV90b3RhbEV4dHJhQXBwUGFnZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIHRvdGFsRXh0cmFBcHBQYWdlcwoJaW50IDEKCXJldHVybgoKdG90YWxFeHRyYUFwcFBhZ2VzOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FjY291bnQuYWxnby50czo0MgoJLy8gYXNzZXJ0KGEudG90YWxFeHRyYUFwcFBhZ2VzKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxFeHRyYUFwcFBhZ2VzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxBcHBzQ3JlYXRlZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxBcHBzQ3JlYXRlZAoJaW50IDEKCXJldHVybgoKdG90YWxBcHBzQ3JlYXRlZDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NDYKCS8vIGFzc2VydChhLnRvdGFsQXBwc0NyZWF0ZWQpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxBcHBzT3B0ZWRJbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxBcHBzT3B0ZWRJbgoJaW50IDEKCXJldHVybgoKdG90YWxBcHBzT3B0ZWRJbjoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NTAKCS8vIGFzc2VydChhLnRvdGFsQXBwc09wdGVkSW4pCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxBc3NldHNDcmVhdGVkOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiB0b3RhbEFzc2V0c0NyZWF0ZWQKCWludCAxCglyZXR1cm4KCnRvdGFsQXNzZXRzQ3JlYXRlZDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NTQKCS8vIGFzc2VydChhLnRvdGFsQXNzZXRzQ3JlYXRlZCkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzQ3JlYXRlZAoJYXNzZXJ0Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX3RvdGFsQXNzZXRzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiB0b3RhbEFzc2V0cwoJaW50IDEKCXJldHVybgoKdG90YWxBc3NldHM6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWNjb3VudC5hbGdvLnRzOjU4CgkvLyBhc3NlcnQoYS50b3RhbEFzc2V0cykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxCb3hlczoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxCb3hlcwoJaW50IDEKCXJldHVybgoKdG90YWxCb3hlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NjIKCS8vIGFzc2VydChhLnRvdGFsQm94ZXMpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfdG90YWxCb3hCeXRlczoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgdG90YWxCb3hCeXRlcwoJaW50IDEKCXJldHVybgoKdG90YWxCb3hCeXRlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hY2NvdW50LmFsZ28udHM6NjYKCS8vIGFzc2VydChhLnRvdGFsQm94Qnl0ZXMpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCglhc3NlcnQKCWFzc2VydAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiaGFzQXNzZXQoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJhc3NldEJhbGFuY2UoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJhc3NldEZyb3plbihhY2NvdW50KXZvaWQiCgltZXRob2QgImhhc0JhbGFuY2UoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJiYWxhbmNlKGFjY291bnQpdm9pZCIKCW1ldGhvZCAibWluQmFsYW5jZShhY2NvdW50KXZvaWQiCgltZXRob2QgImF1dGhBZGRyKGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxOdW1VaW50KGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxOdW1CeXRlU2xpY2UoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJ0b3RhbEV4dHJhQXBwUGFnZXMoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJ0b3RhbEFwcHNDcmVhdGVkKGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxBcHBzT3B0ZWRJbihhY2NvdW50KXZvaWQiCgltZXRob2QgInRvdGFsQXNzZXRzQ3JlYXRlZChhY2NvdW50KXZvaWQiCgltZXRob2QgInRvdGFsQXNzZXRzKGFjY291bnQpdm9pZCIKCW1ldGhvZCAidG90YWxCb3hlcyhhY2NvdW50KXZvaWQiCgltZXRob2QgInRvdGFsQm94Qnl0ZXMoYWNjb3VudCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2hhc0Fzc2V0IGFiaV9yb3V0ZV9hc3NldEJhbGFuY2UgYWJpX3JvdXRlX2Fzc2V0RnJvemVuIGFiaV9yb3V0ZV9oYXNCYWxhbmNlIGFiaV9yb3V0ZV9iYWxhbmNlIGFiaV9yb3V0ZV9taW5CYWxhbmNlIGFiaV9yb3V0ZV9hdXRoQWRkciBhYmlfcm91dGVfdG90YWxOdW1VaW50IGFiaV9yb3V0ZV90b3RhbE51bUJ5dGVTbGljZSBhYmlfcm91dGVfdG90YWxFeHRyYUFwcFBhZ2VzIGFiaV9yb3V0ZV90b3RhbEFwcHNDcmVhdGVkIGFiaV9yb3V0ZV90b3RhbEFwcHNPcHRlZEluIGFiaV9yb3V0ZV90b3RhbEFzc2V0c0NyZWF0ZWQgYWJpX3JvdXRlX3RvdGFsQXNzZXRzIGFiaV9yb3V0ZV90b3RhbEJveGVzIGFiaV9yb3V0ZV90b3RhbEJveEJ5dGVz", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "AccountTest", + "desc": "", + "methods": [ + { + "name": "hasAsset", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "assetBalance", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "assetFrozen", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "hasBalance", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "balance", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "minBalance", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "authAddr", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalNumUint", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalNumByteSlice", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalExtraAppPages", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalAppsCreated", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalAppsOptedIn", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalAssetsCreated", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalAssets", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalBoxes", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "totalBoxBytes", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/BinaryTest.json b/tests/contracts/BinaryTest.json index 2c4d715ab..821626f78 100644 --- a/tests/contracts/BinaryTest.json +++ b/tests/contracts/BinaryTest.json @@ -1 +1,240 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX2FuZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJY2FsbHN1YiBhbmQKCWludCAxCglyZXR1cm4KCmFuZDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czo2CgkvLyBhc3NlcnQoYSAmJiBiKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZHVwCglieiBza2lwX2FuZDAKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSYmCgpza2lwX2FuZDA6Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX29yOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIG9yCglpbnQgMQoJcmV0dXJuCgpvcjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czoxMAoJLy8gYXNzZXJ0KGEgfHwgYikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWR1cAoJYm56IHNraXBfb3IwCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgl8fAoKc2tpcF9vcjA6Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2VxdWFsOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGVxdWFsCglpbnQgMQoJcmV0dXJuCgplcXVhbDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czoxNAoJLy8gYXNzZXJ0KGEgPT09IGIpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9ub3RFcXVhbDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJY2FsbHN1YiBub3RFcXVhbAoJaW50IDEKCXJldHVybgoKbm90RXF1YWw6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYmluYXJ5LmFsZ28udHM6MTgKCS8vIGFzc2VydChhICE9PSBiKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJIT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfYml0QW5kOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGJpdEFuZAoJaW50IDEKCXJldHVybgoKYml0QW5kOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2JpbmFyeS5hbGdvLnRzOjIyCgkvLyBhc3NlcnQoYSAmIGIpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgkmCglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2JpdE9yOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGJpdE9yCglpbnQgMQoJcmV0dXJuCgpiaXRPcjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czoyNgoJLy8gYXNzZXJ0KGEgfCBiKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJfAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9iaXRYb3I6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgYml0WG9yCglpbnQgMQoJcmV0dXJuCgpiaXRYb3I6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYmluYXJ5LmFsZ28udHM6MzAKCS8vIGFzc2VydChhIF4gYikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCV4KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY29tYm86Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgY29tYm8KCWludCAxCglyZXR1cm4KCmNvbWJvOgoJcHJvdG8gMyAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2JpbmFyeS5hbGdvLnRzOjM0CgkvLyBhc3NlcnQoYSB8fCAoYiAmJiBjKSkKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWR1cAoJYm56IHNraXBfb3IxCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglkdXAKCWJ6IHNraXBfYW5kMQoJZnJhbWVfZGlnIC0zIC8vIGM6IHVpbnQ2NAoJJiYKCnNraXBfYW5kMToKCXx8Cgpza2lwX29yMToKCWFzc2VydAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiYW5kKHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAib3IodWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJlcXVhbCh1aW50NjQsdWludDY0KXZvaWQiCgltZXRob2QgIm5vdEVxdWFsKHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiYml0QW5kKHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiYml0T3IodWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJiaXRYb3IodWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJjb21ibyh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2FuZCBhYmlfcm91dGVfb3IgYWJpX3JvdXRlX2VxdWFsIGFiaV9yb3V0ZV9ub3RFcXVhbCBhYmlfcm91dGVfYml0QW5kIGFiaV9yb3V0ZV9iaXRPciBhYmlfcm91dGVfYml0WG9yIGFiaV9yb3V0ZV9jb21ibw==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"BinaryTest","desc":"","methods":[{"name":"and","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"or","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"equal","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"notEqual","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"bitAnd","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"bitOr","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"bitXor","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"combo","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""},{"name":"c","type":"uint64","desc":""}],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "and(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "or(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "equal(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "notEqual(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "bitAnd(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "bitOr(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "bitXor(uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "combo(uint64,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX2FuZDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJY2FsbHN1YiBhbmQKCWludCAxCglyZXR1cm4KCmFuZDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czo2CgkvLyBhc3NlcnQoYSAmJiBiKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZHVwCglieiBza2lwX2FuZDAKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCSYmCgpza2lwX2FuZDA6Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX29yOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIG9yCglpbnQgMQoJcmV0dXJuCgpvcjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czoxMAoJLy8gYXNzZXJ0KGEgfHwgYikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWR1cAoJYm56IHNraXBfb3IwCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgl8fAoKc2tpcF9vcjA6Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2VxdWFsOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGVxdWFsCglpbnQgMQoJcmV0dXJuCgplcXVhbDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czoxNAoJLy8gYXNzZXJ0KGEgPT09IGIpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0Cgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9ub3RFcXVhbDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJY2FsbHN1YiBub3RFcXVhbAoJaW50IDEKCXJldHVybgoKbm90RXF1YWw6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYmluYXJ5LmFsZ28udHM6MTgKCS8vIGFzc2VydChhICE9PSBiKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJIT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfYml0QW5kOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGJpdEFuZAoJaW50IDEKCXJldHVybgoKYml0QW5kOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2JpbmFyeS5hbGdvLnRzOjIyCgkvLyBhc3NlcnQoYSAmIGIpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgkmCglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2JpdE9yOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIGJpdE9yCglpbnQgMQoJcmV0dXJuCgpiaXRPcjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9iaW5hcnkuYWxnby50czoyNgoJLy8gYXNzZXJ0KGEgfCBiKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJfAoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9iaXRYb3I6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgYml0WG9yCglpbnQgMQoJcmV0dXJuCgpiaXRYb3I6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYmluYXJ5LmFsZ28udHM6MzAKCS8vIGFzc2VydChhIF4gYikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50NjQKCV4KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfY29tYm86Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgY29tYm8KCWludCAxCglyZXR1cm4KCmNvbWJvOgoJcHJvdG8gMyAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2JpbmFyeS5hbGdvLnRzOjM0CgkvLyBhc3NlcnQoYSB8fCAoYiAmJiBjKSkKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjQKCWR1cAoJYm56IHNraXBfb3IxCglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CglkdXAKCWJ6IHNraXBfYW5kMQoJZnJhbWVfZGlnIC0zIC8vIGM6IHVpbnQ2NAoJJiYKCnNraXBfYW5kMToKCXx8Cgpza2lwX29yMToKCWFzc2VydAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiYW5kKHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAib3IodWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJlcXVhbCh1aW50NjQsdWludDY0KXZvaWQiCgltZXRob2QgIm5vdEVxdWFsKHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiYml0QW5kKHVpbnQ2NCx1aW50NjQpdm9pZCIKCW1ldGhvZCAiYml0T3IodWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJiaXRYb3IodWludDY0LHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJjb21ibyh1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggYWJpX3JvdXRlX2FuZCBhYmlfcm91dGVfb3IgYWJpX3JvdXRlX2VxdWFsIGFiaV9yb3V0ZV9ub3RFcXVhbCBhYmlfcm91dGVfYml0QW5kIGFiaV9yb3V0ZV9iaXRPciBhYmlfcm91dGVfYml0WG9yIGFiaV9yb3V0ZV9jb21ibw==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "BinaryTest", + "desc": "", + "methods": [ + { + "name": "and", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "or", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "equal", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "notEqual", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "bitAnd", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "bitOr", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "bitXor", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "combo", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + }, + { + "name": "c", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/IfTest.json b/tests/contracts/IfTest.json index bd662e3cf..57c9b3486 100644 --- a/tests/contracts/IfTest.json +++ b/tests/contracts/IfTest.json @@ -1 +1,119 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3NpbmdsZUlmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIHNpbmdsZUlmCglpbnQgMQoJcmV0dXJuCgpzaW5nbGVJZjoKCXByb3RvIDAgMAoKCS8vIGlmMF9jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjYKCS8vIGFzc2VydCgxKQoJaW50IDEKCWFzc2VydAoJYnogaWYwX2VuZAoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo3CgkvLyBsb2coJ0lmJykKCWJ5dGUgIklmIgoJbG9nCgppZjBfZW5kOgoJcmV0c3ViCgphYmlfcm91dGVfaWZFbHNlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGlmRWxzZQoJaW50IDEKCXJldHVybgoKaWZFbHNlOgoJcHJvdG8gMCAwCgoJLy8gaWYxX2NvbmRpdGlvbgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MTIKCS8vIGFzc2VydCgxKQoJaW50IDEKCWFzc2VydAoJYnogaWYxX2Vsc2UKCgkvLyBpZjFfY29uc2VxdWVudAoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MTMKCS8vIGxvZygnSWYnKQoJYnl0ZSAiSWYiCglsb2cKCWIgaWYxX2VuZAoKaWYxX2Vsc2U6CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czoxNQoJLy8gbG9nKCdlbHNlJykKCWJ5dGUgImVsc2UiCglsb2cKCmlmMV9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV9pZkVsc2VJZjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBpZkVsc2VJZgoJaW50IDEKCXJldHVybgoKaWZFbHNlSWY6Cglwcm90byAwIDAKCgkvLyBpZjJfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czoyMAoJLy8gYXNzZXJ0KDEpCglpbnQgMQoJYXNzZXJ0CglieiBpZjJfZWxzZWlmMV9jb25kaXRpb24KCgkvLyBpZjJfY29uc2VxdWVudAoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MjEKCS8vIGxvZygnSWYnKQoJYnl0ZSAiSWYiCglsb2cKCWIgaWYyX2VuZAoKaWYyX2Vsc2VpZjFfY29uZGl0aW9uOgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MjIKCS8vIGFzc2VydCgyKQoJaW50IDIKCWFzc2VydAoJYnogaWYyX2VuZAoKCS8vIGlmMl9lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjIzCgkvLyBsb2coJ2Vsc2UgaWYnKQoJYnl0ZSAiZWxzZSBpZiIKCWxvZwoKaWYyX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2lmRWxzZUlmRWxzZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBpZkVsc2VJZkVsc2UKCWludCAxCglyZXR1cm4KCmlmRWxzZUlmRWxzZToKCXByb3RvIDAgMAoKCS8vIGlmM19jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjI4CgkvLyBhc3NlcnQoMSkKCWludCAxCglhc3NlcnQKCWJ6IGlmM19lbHNlaWYxX2NvbmRpdGlvbgoKCS8vIGlmM19jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czoyOQoJLy8gbG9nKCdJZicpCglieXRlICJJZiIKCWxvZwoJYiBpZjNfZW5kCgppZjNfZWxzZWlmMV9jb25kaXRpb246CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czozMAoJLy8gYXNzZXJ0KDIpCglpbnQgMgoJYXNzZXJ0CglieiBpZjNfZWxzZQoKCS8vIGlmM19lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjMxCgkvLyBsb2coJ2Vsc2UgaWYnKQoJYnl0ZSAiZWxzZSBpZiIKCWxvZwoJYiBpZjNfZW5kCgppZjNfZWxzZToKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjMzCgkvLyBsb2coJ2Vsc2UnKQoJYnl0ZSAiZWxzZSIKCWxvZwoKaWYzX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2lmRWxzZUlmRWxzZUlmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGlmRWxzZUlmRWxzZUlmCglpbnQgMQoJcmV0dXJuCgppZkVsc2VJZkVsc2VJZjoKCXByb3RvIDAgMAoKCS8vIGlmNF9jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjM4CgkvLyBhc3NlcnQoMSkKCWludCAxCglhc3NlcnQKCWJ6IGlmNF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vIGlmNF9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czozOQoJLy8gbG9nKCdpZicpCglieXRlICJpZiIKCWxvZwoJYiBpZjRfZW5kCgppZjRfZWxzZWlmMV9jb25kaXRpb246CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo0MAoJLy8gYXNzZXJ0KDIpCglpbnQgMgoJYXNzZXJ0CglieiBpZjRfZWxzZWlmMl9jb25kaXRpb24KCgkvLyBpZjRfZWxzZWlmMV9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo0MQoJLy8gbG9nKCdlbHNlIGlmIDEnKQoJYnl0ZSAiZWxzZSBpZiAxIgoJbG9nCgliIGlmNF9lbmQKCmlmNF9lbHNlaWYyX2NvbmRpdGlvbjoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjQyCgkvLyBhc3NlcnQoMykKCWludCAzCglhc3NlcnQKCWJ6IGlmNF9lbmQKCgkvLyBpZjRfZWxzZWlmMl9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo0MwoJLy8gbG9nKCdlbHNlIGlmIDInKQoJYnl0ZSAiZWxzZSBpZiAyIgoJbG9nCgppZjRfZW5kOgoJcmV0c3ViCgphYmlfcm91dGVfaWZFbHNlSWZFbHNlSWZFbHNlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGlmRWxzZUlmRWxzZUlmRWxzZQoJaW50IDEKCXJldHVybgoKaWZFbHNlSWZFbHNlSWZFbHNlOgoJcHJvdG8gMCAwCgoJLy8gaWY1X2NvbmRpdGlvbgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6NDgKCS8vIGFzc2VydCgxKQoJaW50IDEKCWFzc2VydAoJYnogaWY1X2Vsc2VpZjFfY29uZGl0aW9uCgoJLy8gaWY1X2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjQ5CgkvLyBsb2coJ2lmJykKCWJ5dGUgImlmIgoJbG9nCgliIGlmNV9lbmQKCmlmNV9lbHNlaWYxX2NvbmRpdGlvbjoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjUwCgkvLyBhc3NlcnQoMikKCWludCAyCglhc3NlcnQKCWJ6IGlmNV9lbHNlaWYyX2NvbmRpdGlvbgoKCS8vIGlmNV9lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjUxCgkvLyBsb2coJ2Vsc2UgaWYgMScpCglieXRlICJlbHNlIGlmIDEiCglsb2cKCWIgaWY1X2VuZAoKaWY1X2Vsc2VpZjJfY29uZGl0aW9uOgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6NTIKCS8vIGFzc2VydCgzKQoJaW50IDMKCWFzc2VydAoJYnogaWY1X2Vsc2UKCgkvLyBpZjVfZWxzZWlmMl9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo1MwoJLy8gbG9nKCdlbHNlIGlmIDInKQoJYnl0ZSAiZWxzZSBpZiAyIgoJbG9nCgliIGlmNV9lbmQKCmlmNV9lbHNlOgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6NTUKCS8vIGxvZygnZWxzZScpCglieXRlICJlbHNlIgoJbG9nCgppZjVfZW5kOgoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAic2luZ2xlSWYoKXZvaWQiCgltZXRob2QgImlmRWxzZSgpdm9pZCIKCW1ldGhvZCAiaWZFbHNlSWYoKXZvaWQiCgltZXRob2QgImlmRWxzZUlmRWxzZSgpdm9pZCIKCW1ldGhvZCAiaWZFbHNlSWZFbHNlSWYoKXZvaWQiCgltZXRob2QgImlmRWxzZUlmRWxzZUlmRWxzZSgpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9zaW5nbGVJZiBhYmlfcm91dGVfaWZFbHNlIGFiaV9yb3V0ZV9pZkVsc2VJZiBhYmlfcm91dGVfaWZFbHNlSWZFbHNlIGFiaV9yb3V0ZV9pZkVsc2VJZkVsc2VJZiBhYmlfcm91dGVfaWZFbHNlSWZFbHNlSWZFbHNl","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"IfTest","desc":"","methods":[{"name":"singleIf","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"ifElse","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"ifElseIf","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"ifElseIfElse","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"ifElseIfElseIf","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"ifElseIfElseIfElse","args":[],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "singleIf()void": { + "call_config": { + "no_op": "CALL" + } + }, + "ifElse()void": { + "call_config": { + "no_op": "CALL" + } + }, + "ifElseIf()void": { + "call_config": { + "no_op": "CALL" + } + }, + "ifElseIfElse()void": { + "call_config": { + "no_op": "CALL" + } + }, + "ifElseIfElseIf()void": { + "call_config": { + "no_op": "CALL" + } + }, + "ifElseIfElseIfElse()void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3NpbmdsZUlmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIHNpbmdsZUlmCglpbnQgMQoJcmV0dXJuCgpzaW5nbGVJZjoKCXByb3RvIDAgMAoKCS8vIGlmMF9jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjYKCS8vIGFzc2VydCgxKQoJaW50IDEKCWFzc2VydAoJYnogaWYwX2VuZAoKCS8vIGlmMF9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo3CgkvLyBsb2coJ0lmJykKCWJ5dGUgIklmIgoJbG9nCgppZjBfZW5kOgoJcmV0c3ViCgphYmlfcm91dGVfaWZFbHNlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGlmRWxzZQoJaW50IDEKCXJldHVybgoKaWZFbHNlOgoJcHJvdG8gMCAwCgoJLy8gaWYxX2NvbmRpdGlvbgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MTIKCS8vIGFzc2VydCgxKQoJaW50IDEKCWFzc2VydAoJYnogaWYxX2Vsc2UKCgkvLyBpZjFfY29uc2VxdWVudAoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MTMKCS8vIGxvZygnSWYnKQoJYnl0ZSAiSWYiCglsb2cKCWIgaWYxX2VuZAoKaWYxX2Vsc2U6CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czoxNQoJLy8gbG9nKCdlbHNlJykKCWJ5dGUgImVsc2UiCglsb2cKCmlmMV9lbmQ6CglyZXRzdWIKCmFiaV9yb3V0ZV9pZkVsc2VJZjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBpZkVsc2VJZgoJaW50IDEKCXJldHVybgoKaWZFbHNlSWY6Cglwcm90byAwIDAKCgkvLyBpZjJfY29uZGl0aW9uCgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czoyMAoJLy8gYXNzZXJ0KDEpCglpbnQgMQoJYXNzZXJ0CglieiBpZjJfZWxzZWlmMV9jb25kaXRpb24KCgkvLyBpZjJfY29uc2VxdWVudAoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MjEKCS8vIGxvZygnSWYnKQoJYnl0ZSAiSWYiCglsb2cKCWIgaWYyX2VuZAoKaWYyX2Vsc2VpZjFfY29uZGl0aW9uOgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6MjIKCS8vIGFzc2VydCgyKQoJaW50IDIKCWFzc2VydAoJYnogaWYyX2VuZAoKCS8vIGlmMl9lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjIzCgkvLyBsb2coJ2Vsc2UgaWYnKQoJYnl0ZSAiZWxzZSBpZiIKCWxvZwoKaWYyX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2lmRWxzZUlmRWxzZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBpZkVsc2VJZkVsc2UKCWludCAxCglyZXR1cm4KCmlmRWxzZUlmRWxzZToKCXByb3RvIDAgMAoKCS8vIGlmM19jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjI4CgkvLyBhc3NlcnQoMSkKCWludCAxCglhc3NlcnQKCWJ6IGlmM19lbHNlaWYxX2NvbmRpdGlvbgoKCS8vIGlmM19jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czoyOQoJLy8gbG9nKCdJZicpCglieXRlICJJZiIKCWxvZwoJYiBpZjNfZW5kCgppZjNfZWxzZWlmMV9jb25kaXRpb246CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czozMAoJLy8gYXNzZXJ0KDIpCglpbnQgMgoJYXNzZXJ0CglieiBpZjNfZWxzZQoKCS8vIGlmM19lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjMxCgkvLyBsb2coJ2Vsc2UgaWYnKQoJYnl0ZSAiZWxzZSBpZiIKCWxvZwoJYiBpZjNfZW5kCgppZjNfZWxzZToKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjMzCgkvLyBsb2coJ2Vsc2UnKQoJYnl0ZSAiZWxzZSIKCWxvZwoKaWYzX2VuZDoKCXJldHN1YgoKYWJpX3JvdXRlX2lmRWxzZUlmRWxzZUlmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGlmRWxzZUlmRWxzZUlmCglpbnQgMQoJcmV0dXJuCgppZkVsc2VJZkVsc2VJZjoKCXByb3RvIDAgMAoKCS8vIGlmNF9jb25kaXRpb24KCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjM4CgkvLyBhc3NlcnQoMSkKCWludCAxCglhc3NlcnQKCWJ6IGlmNF9lbHNlaWYxX2NvbmRpdGlvbgoKCS8vIGlmNF9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czozOQoJLy8gbG9nKCdpZicpCglieXRlICJpZiIKCWxvZwoJYiBpZjRfZW5kCgppZjRfZWxzZWlmMV9jb25kaXRpb246CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo0MAoJLy8gYXNzZXJ0KDIpCglpbnQgMgoJYXNzZXJ0CglieiBpZjRfZWxzZWlmMl9jb25kaXRpb24KCgkvLyBpZjRfZWxzZWlmMV9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo0MQoJLy8gbG9nKCdlbHNlIGlmIDEnKQoJYnl0ZSAiZWxzZSBpZiAxIgoJbG9nCgliIGlmNF9lbmQKCmlmNF9lbHNlaWYyX2NvbmRpdGlvbjoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjQyCgkvLyBhc3NlcnQoMykKCWludCAzCglhc3NlcnQKCWJ6IGlmNF9lbmQKCgkvLyBpZjRfZWxzZWlmMl9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo0MwoJLy8gbG9nKCdlbHNlIGlmIDInKQoJYnl0ZSAiZWxzZSBpZiAyIgoJbG9nCgppZjRfZW5kOgoJcmV0c3ViCgphYmlfcm91dGVfaWZFbHNlSWZFbHNlSWZFbHNlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGlmRWxzZUlmRWxzZUlmRWxzZQoJaW50IDEKCXJldHVybgoKaWZFbHNlSWZFbHNlSWZFbHNlOgoJcHJvdG8gMCAwCgoJLy8gaWY1X2NvbmRpdGlvbgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6NDgKCS8vIGFzc2VydCgxKQoJaW50IDEKCWFzc2VydAoJYnogaWY1X2Vsc2VpZjFfY29uZGl0aW9uCgoJLy8gaWY1X2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjQ5CgkvLyBsb2coJ2lmJykKCWJ5dGUgImlmIgoJbG9nCgliIGlmNV9lbmQKCmlmNV9lbHNlaWYxX2NvbmRpdGlvbjoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjUwCgkvLyBhc3NlcnQoMikKCWludCAyCglhc3NlcnQKCWJ6IGlmNV9lbHNlaWYyX2NvbmRpdGlvbgoKCS8vIGlmNV9lbHNlaWYxX2NvbnNlcXVlbnQKCS8vIHRlc3RzL2NvbnRyYWN0cy9pZi5hbGdvLnRzOjUxCgkvLyBsb2coJ2Vsc2UgaWYgMScpCglieXRlICJlbHNlIGlmIDEiCglsb2cKCWIgaWY1X2VuZAoKaWY1X2Vsc2VpZjJfY29uZGl0aW9uOgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6NTIKCS8vIGFzc2VydCgzKQoJaW50IDMKCWFzc2VydAoJYnogaWY1X2Vsc2UKCgkvLyBpZjVfZWxzZWlmMl9jb25zZXF1ZW50CgkvLyB0ZXN0cy9jb250cmFjdHMvaWYuYWxnby50czo1MwoJLy8gbG9nKCdlbHNlIGlmIDInKQoJYnl0ZSAiZWxzZSBpZiAyIgoJbG9nCgliIGlmNV9lbmQKCmlmNV9lbHNlOgoJLy8gdGVzdHMvY29udHJhY3RzL2lmLmFsZ28udHM6NTUKCS8vIGxvZygnZWxzZScpCglieXRlICJlbHNlIgoJbG9nCgppZjVfZW5kOgoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAic2luZ2xlSWYoKXZvaWQiCgltZXRob2QgImlmRWxzZSgpdm9pZCIKCW1ldGhvZCAiaWZFbHNlSWYoKXZvaWQiCgltZXRob2QgImlmRWxzZUlmRWxzZSgpdm9pZCIKCW1ldGhvZCAiaWZFbHNlSWZFbHNlSWYoKXZvaWQiCgltZXRob2QgImlmRWxzZUlmRWxzZUlmRWxzZSgpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9zaW5nbGVJZiBhYmlfcm91dGVfaWZFbHNlIGFiaV9yb3V0ZV9pZkVsc2VJZiBhYmlfcm91dGVfaWZFbHNlSWZFbHNlIGFiaV9yb3V0ZV9pZkVsc2VJZkVsc2VJZiBhYmlfcm91dGVfaWZFbHNlSWZFbHNlSWZFbHNl", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "IfTest", + "desc": "", + "methods": [ + { + "name": "singleIf", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "ifElse", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "ifElseIf", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "ifElseIfElse", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "ifElseIfElseIf", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "ifElseIfElseIfElse", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/ItxnsTest.json b/tests/contracts/ItxnsTest.json index 90ff464ec..89184d4d8 100644 --- a/tests/contracts/ItxnsTest.json +++ b/tests/contracts/ItxnsTest.json @@ -1 +1,161 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3BheW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgcGF5bWVudAoJaW50IDEKCXJldHVybgoKcGF5bWVudDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYKCS8vIHNlbmRQYXltZW50KAoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjgKCS8vIGFtb3VudDogMTAwCglpbnQgMTAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjkKCS8vIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMAoJLy8gY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy56ZXJvQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMgoJLy8gc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTMKCS8vIHJla2V5VG86IGdsb2JhbHMuemVyb0FkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJaXR4bl9maWVsZCBSZWtleVRvCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTQKCS8vIG5vdGU6ICdIZWxsbyBXb3JsZCEnCglieXRlICJIZWxsbyBXb3JsZCEiCglpdHhuX2ZpZWxkIE5vdGUKCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldENyZWF0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGFzc2V0Q3JlYXRpb24KCWludCAxCglyZXR1cm4KCmFzc2V0Q3JlYXRpb246Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMAoJLy8gcmV0dXJuIHNlbmRBc3NldENyZWF0aW9uKHsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjEKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjIKCS8vIGNvbmZpZ0Fzc2V0TmFtZTogJ25hbWUnCglieXRlICJuYW1lIgoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMwoJLy8gY29uZmlnQXNzZXRVbml0TmFtZTogJ3VuaXQnCglieXRlICJ1bml0IgoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjQKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludCAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNQoJLy8gY29uZmlnQXNzZXREZWNpbWFsczogMAoJaW50IDAKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjI2CgkvLyBjb25maWdBc3NldE1hbmFnZXI6IHRoaXMuYXBwLmFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNwoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjgKCS8vIGNvbmZpZ0Fzc2V0RnJlZXplOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyOQoJLy8gY29uZmlnQXNzZXRDbGF3YmFjazogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozMAoJLy8gY29uZmlnQXNzZXREZWZhdWx0RnJvemVuOiAwCglpbnQgMAoJaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozMQoJLy8gY29uZmlnQXNzZXRVUkw6ICd1cmwnCglieXRlICJ1cmwiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzIKCS8vIGNvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoOiAnaGFzaCcKCWJ5dGUgImhhc2giCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYXBwQ2FsbDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBhcHBDYWxsCglpbnQgMQoJcmV0dXJuCgphcHBDYWxsOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzcKCS8vIHNlbmRBcHBDYWxsKHsKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzgKCS8vIGFjY291bnRzOiBbdGhpcy5hcHAuYWRkcmVzc10KCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBBY2NvdW50cwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjM5CgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsnYXJnMScsICdhcmcyJ10KCWJ5dGUgImFyZzEiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJYnl0ZSAiYXJnMiIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NDAKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuYXBwCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MQoJLy8gYXBwbGljYXRpb25zOiBbdGhpcy5hcHBdCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQyCgkvLyBhcHByb3ZhbFByb2dyYW06ICdhcHByb3ZhbCcKCWJ5dGUgImFwcHJvdmFsIgoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MwoJLy8gYXNzZXRzOiBbQXNzZXQuemVyb0luZGV4XQoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NDQKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiAnY2xlYXInCglieXRlICJjbGVhciIKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NgoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiAxCglpbnQgMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NwoJLy8gZ2xvYmFsTnVtVWludDogMQoJaW50IDEKCWl0eG5fZmllbGQgR2xvYmFsTnVtVWludAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQ4CgkvLyBsb2NhbE51bUJ5dGVTbGljZTogMQoJaW50IDEKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0OQoJLy8gbG9jYWxOdW1VaW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1MAoJLy8gbm90ZTogJ25vdGUnCglieXRlICJub3RlIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTEKCS8vIG9uQ29tcGxldGlvbjogJ05vT3AnCglpbnQgTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldENvbmZpZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBhc3NldENvbmZpZwoJaW50IDEKCXJldHVybgoKYXNzZXRDb25maWc6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1NgoJLy8gc2VuZEFzc2V0Q29uZmlnKHsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTcKCS8vIGNvbmZpZ0Fzc2V0OiBBc3NldC56ZXJvSW5kZXgKCWludCAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTgKCS8vIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjU5CgkvLyBjb25maWdBc3NldFJlc2VydmU6IHRoaXMuYXBwLmFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo2MAoJLy8gY29uZmlnQXNzZXRGcmVlemU6IHRoaXMuYXBwLmFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYxCgkvLyBjb25maWdBc3NldENsYXdiYWNrOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYyCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKYWJpX3JvdXRlX2Fzc2V0RnJlZXplOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGFzc2V0RnJlZXplCglpbnQgMQoJcmV0dXJuCgphc3NldEZyZWV6ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjY3CgkvLyBzZW5kQXNzZXRGcmVlemUoewoJaXR4bl9iZWdpbgoJaW50IGFmcnoKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo2OAoJLy8gZnJlZXplQXNzZXRGcm96ZW46IDEKCWludCAxCglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjkKCS8vIGZyZWV6ZUFzc2V0QWNjb3VudDogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcwCgkvLyBmcmVlemVBc3NldDogQXNzZXQuemVyb0luZGV4CglpbnQgMAoJaXR4bl9maWVsZCBGcmVlemVBc3NldAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcxCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKYWJpX3JvdXRlX2Fzc2V0VHJhbnNmZXI6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYXNzZXRUcmFuc2ZlcgoJaW50IDEKCXJldHVybgoKYXNzZXRUcmFuc2ZlcjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjc2CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo3NwoJLy8gYXNzZXRBbW91bnQ6IDEKCWludCAxCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NzgKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjc5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjgwCgkvLyBhc3NldFNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODEKCS8vIHhmZXJBc3NldDogQXNzZXQuemVyb0luZGV4CglpbnQgMAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo4MgoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9tZXRob2RDYWxsOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIG1ldGhvZENhbGwKCWludCAxCglyZXR1cm4KCm1ldGhvZENhbGw6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo4NwoJLy8gcmV0dXJuIHNlbmRNZXRob2RDYWxsPFtBcHBsaWNhdGlvbiwgQXNzZXRdLCBBc3NldD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibWV0aG9kKGFwcGxpY2F0aW9uLGFzc2V0KXVpbnQ2NCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODkKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLmFwcCwgQXNzZXQuemVyb0luZGV4XQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCWludCAxCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRzCglpbnQgMAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo5MAoJLy8gb25Db21wbGV0aW9uOiAnTm9PcCcKCWludCBOb09wCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjkxCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfb25saW5lS2V5UmVnaXN0cmF0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIG9ubGluZUtleVJlZ2lzdHJhdGlvbgoJaW50IDEKCXJldHVybgoKb25saW5lS2V5UmVnaXN0cmF0aW9uOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTYKCS8vIHNlbmRPbmxpbmVLZXlSZWdpc3RyYXRpb24oewoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjk3CgkvLyBzZWxlY3Rpb25QSzogJ3BrJwoJYnl0ZSAicGsiCglpdHhuX2ZpZWxkIFNlbGVjdGlvblBLCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTgKCS8vIHN0YXRlUHJvb2ZQSzogJ3BrJwoJYnl0ZSAicGsiCglpdHhuX2ZpZWxkIFN0YXRlUHJvb2ZQSwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjk5CgkvLyB2b3RlRmlyc3Q6IDEKCWludCAxCglpdHhuX2ZpZWxkIFZvdGVGaXJzdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMAoJLy8gdm90ZUtleURpbHV0aW9uOiAxCglpbnQgMQoJaXR4bl9maWVsZCBWb3RlS2V5RGlsdXRpb24KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMDEKCS8vIHZvdGVMYXN0OiAxCglpbnQgMQoJaXR4bl9maWVsZCBWb3RlTGFzdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMgoJLy8gdm90ZVBLOiAncGsnCglieXRlICJwayIKCWl0eG5fZmllbGQgVm90ZVBLCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTAzCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKYWJpX3JvdXRlX29mZmxpbmVLZXlSZWdpc3RyYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgb2ZmbGluZUtleVJlZ2lzdHJhdGlvbgoJaW50IDEKCXJldHVybgoKb2ZmbGluZUtleVJlZ2lzdHJhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwOAoJLy8gc2VuZE9mZmxpbmVLZXlSZWdpc3RyYXRpb24oewoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwOQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoKCS8vIGRlZmF1bHQgY3JlYXRlQXBwbGljYXRpb24KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJJiYKCXJldHVybgoKcm91dGVfYWJpOgoJbWV0aG9kICJwYXltZW50KCl2b2lkIgoJbWV0aG9kICJhc3NldENyZWF0aW9uKCl1aW50NjQiCgltZXRob2QgImFwcENhbGwoKXZvaWQiCgltZXRob2QgImFzc2V0Q29uZmlnKCl2b2lkIgoJbWV0aG9kICJhc3NldEZyZWV6ZSgpdm9pZCIKCW1ldGhvZCAiYXNzZXRUcmFuc2Zlcigpdm9pZCIKCW1ldGhvZCAibWV0aG9kQ2FsbCgpdWludDY0IgoJbWV0aG9kICJvbmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQiCgltZXRob2QgIm9mZmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfcGF5bWVudCBhYmlfcm91dGVfYXNzZXRDcmVhdGlvbiBhYmlfcm91dGVfYXBwQ2FsbCBhYmlfcm91dGVfYXNzZXRDb25maWcgYWJpX3JvdXRlX2Fzc2V0RnJlZXplIGFiaV9yb3V0ZV9hc3NldFRyYW5zZmVyIGFiaV9yb3V0ZV9tZXRob2RDYWxsIGFiaV9yb3V0ZV9vbmxpbmVLZXlSZWdpc3RyYXRpb24gYWJpX3JvdXRlX29mZmxpbmVLZXlSZWdpc3RyYXRpb24=","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"ItxnsTest","desc":"","methods":[{"name":"payment","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"assetCreation","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"appCall","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"assetConfig","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"assetFreeze","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"assetTransfer","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"methodCall","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"onlineKeyRegistration","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"offlineKeyRegistration","args":[],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "payment()void": { + "call_config": { + "no_op": "CALL" + } + }, + "assetCreation()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "appCall()void": { + "call_config": { + "no_op": "CALL" + } + }, + "assetConfig()void": { + "call_config": { + "no_op": "CALL" + } + }, + "assetFreeze()void": { + "call_config": { + "no_op": "CALL" + } + }, + "assetTransfer()void": { + "call_config": { + "no_op": "CALL" + } + }, + "methodCall()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "onlineKeyRegistration()void": { + "call_config": { + "no_op": "CALL" + } + }, + "offlineKeyRegistration()void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3BheW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgcGF5bWVudAoJaW50IDEKCXJldHVybgoKcGF5bWVudDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYKCS8vIHNlbmRQYXltZW50KAoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjgKCS8vIGFtb3VudDogMTAwCglpbnQgMTAwCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjkKCS8vIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMAoJLy8gY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy56ZXJvQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMgoJLy8gc2VuZGVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTMKCS8vIHJla2V5VG86IGdsb2JhbHMuemVyb0FkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJaXR4bl9maWVsZCBSZWtleVRvCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTQKCS8vIG5vdGU6ICdIZWxsbyBXb3JsZCEnCglieXRlICJIZWxsbyBXb3JsZCEiCglpdHhuX2ZpZWxkIE5vdGUKCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldENyZWF0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGFzc2V0Q3JlYXRpb24KCWludCAxCglyZXR1cm4KCmFzc2V0Q3JlYXRpb246Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMAoJLy8gcmV0dXJuIHNlbmRBc3NldENyZWF0aW9uKHsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjEKCS8vIGZlZTogMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjIKCS8vIGNvbmZpZ0Fzc2V0TmFtZTogJ25hbWUnCglieXRlICJuYW1lIgoJaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyMwoJLy8gY29uZmlnQXNzZXRVbml0TmFtZTogJ3VuaXQnCglieXRlICJ1bml0IgoJaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjQKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludCAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNQoJLy8gY29uZmlnQXNzZXREZWNpbWFsczogMAoJaW50IDAKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjI2CgkvLyBjb25maWdBc3NldE1hbmFnZXI6IHRoaXMuYXBwLmFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyNwoJLy8gY29uZmlnQXNzZXRSZXNlcnZlOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MjgKCS8vIGNvbmZpZ0Fzc2V0RnJlZXplOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoyOQoJLy8gY29uZmlnQXNzZXRDbGF3YmFjazogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozMAoJLy8gY29uZmlnQXNzZXREZWZhdWx0RnJvemVuOiAwCglpbnQgMAoJaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czozMQoJLy8gY29uZmlnQXNzZXRVUkw6ICd1cmwnCglieXRlICJ1cmwiCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzIKCS8vIGNvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoOiAnaGFzaCcKCWJ5dGUgImhhc2giCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWV0YWRhdGFIYXNoCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYXBwQ2FsbDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBhcHBDYWxsCglpbnQgMQoJcmV0dXJuCgphcHBDYWxsOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzcKCS8vIHNlbmRBcHBDYWxsKHsKCWl0eG5fYmVnaW4KCWludCBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MzgKCS8vIGFjY291bnRzOiBbdGhpcy5hcHAuYWRkcmVzc10KCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBBY2NvdW50cwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjM5CgkvLyBhcHBsaWNhdGlvbkFyZ3M6IFsnYXJnMScsICdhcmcyJ10KCWJ5dGUgImFyZzEiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJYnl0ZSAiYXJnMiIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NDAKCS8vIGFwcGxpY2F0aW9uSUQ6IHRoaXMuYXBwCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MQoJLy8gYXBwbGljYXRpb25zOiBbdGhpcy5hcHBdCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQyCgkvLyBhcHByb3ZhbFByb2dyYW06ICdhcHByb3ZhbCcKCWJ5dGUgImFwcHJvdmFsIgoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0MwoJLy8gYXNzZXRzOiBbQXNzZXQuemVyb0luZGV4XQoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NDQKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiAnY2xlYXInCglieXRlICJjbGVhciIKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NgoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiAxCglpbnQgMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0NwoJLy8gZ2xvYmFsTnVtVWludDogMQoJaW50IDEKCWl0eG5fZmllbGQgR2xvYmFsTnVtVWludAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjQ4CgkvLyBsb2NhbE51bUJ5dGVTbGljZTogMQoJaW50IDEKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo0OQoJLy8gbG9jYWxOdW1VaW50OiAxCglpbnQgMQoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1MAoJLy8gbm90ZTogJ25vdGUnCglieXRlICJub3RlIgoJaXR4bl9maWVsZCBOb3RlCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTEKCS8vIG9uQ29tcGxldGlvbjogJ05vT3AnCglpbnQgTm9PcAoJaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9hc3NldENvbmZpZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBhc3NldENvbmZpZwoJaW50IDEKCXJldHVybgoKYXNzZXRDb25maWc6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo1NgoJLy8gc2VuZEFzc2V0Q29uZmlnKHsKCWl0eG5fYmVnaW4KCWludCBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTcKCS8vIGNvbmZpZ0Fzc2V0OiBBc3NldC56ZXJvSW5kZXgKCWludCAwCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NTgKCS8vIGNvbmZpZ0Fzc2V0TWFuYWdlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjU5CgkvLyBjb25maWdBc3NldFJlc2VydmU6IHRoaXMuYXBwLmFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo2MAoJLy8gY29uZmlnQXNzZXRGcmVlemU6IHRoaXMuYXBwLmFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKCWFzc2VydAoJaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYxCgkvLyBjb25maWdBc3NldENsYXdiYWNrOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjYyCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKYWJpX3JvdXRlX2Fzc2V0RnJlZXplOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGFzc2V0RnJlZXplCglpbnQgMQoJcmV0dXJuCgphc3NldEZyZWV6ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjY3CgkvLyBzZW5kQXNzZXRGcmVlemUoewoJaXR4bl9iZWdpbgoJaW50IGFmcnoKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo2OAoJLy8gZnJlZXplQXNzZXRGcm96ZW46IDEKCWludCAxCglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NjkKCS8vIGZyZWV6ZUFzc2V0QWNjb3VudDogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcwCgkvLyBmcmVlemVBc3NldDogQXNzZXQuemVyb0luZGV4CglpbnQgMAoJaXR4bl9maWVsZCBGcmVlemVBc3NldAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjcxCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKYWJpX3JvdXRlX2Fzc2V0VHJhbnNmZXI6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYXNzZXRUcmFuc2ZlcgoJaW50IDEKCXJldHVybgoKYXNzZXRUcmFuc2ZlcjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjc2CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo3NwoJLy8gYXNzZXRBbW91bnQ6IDEKCWludCAxCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6NzgKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjc5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglhc3NlcnQKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjgwCgkvLyBhc3NldFNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJYXNzZXJ0CglpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODEKCS8vIHhmZXJBc3NldDogQXNzZXQuemVyb0luZGV4CglpbnQgMAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo4MgoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCmFiaV9yb3V0ZV9tZXRob2RDYWxsOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIG1ldGhvZENhbGwKCWludCAxCglyZXR1cm4KCm1ldGhvZENhbGw6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo4NwoJLy8gcmV0dXJuIHNlbmRNZXRob2RDYWxsPFtBcHBsaWNhdGlvbiwgQXNzZXRdLCBBc3NldD4oewoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibWV0aG9kKGFwcGxpY2F0aW9uLGFzc2V0KXVpbnQ2NCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6ODkKCS8vIG1ldGhvZEFyZ3M6IFt0aGlzLmFwcCwgQXNzZXQuemVyb0luZGV4XQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKCWludCAxCglpdG9iCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRzCglpbnQgMAoJaXRvYgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czo5MAoJLy8gb25Db21wbGV0aW9uOiAnTm9PcCcKCWludCBOb09wCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjkxCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCWl0eG4gTnVtTG9ncwoJaW50IDEKCS0KCWl0eG5hcyBMb2dzCglleHRyYWN0IDQgMAoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfb25saW5lS2V5UmVnaXN0cmF0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIG9ubGluZUtleVJlZ2lzdHJhdGlvbgoJaW50IDEKCXJldHVybgoKb25saW5lS2V5UmVnaXN0cmF0aW9uOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTYKCS8vIHNlbmRPbmxpbmVLZXlSZWdpc3RyYXRpb24oewoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjk3CgkvLyBzZWxlY3Rpb25QSzogJ3BrJwoJYnl0ZSAicGsiCglpdHhuX2ZpZWxkIFNlbGVjdGlvblBLCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6OTgKCS8vIHN0YXRlUHJvb2ZQSzogJ3BrJwoJYnl0ZSAicGsiCglpdHhuX2ZpZWxkIFN0YXRlUHJvb2ZQSwoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjk5CgkvLyB2b3RlRmlyc3Q6IDEKCWludCAxCglpdHhuX2ZpZWxkIFZvdGVGaXJzdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMAoJLy8gdm90ZUtleURpbHV0aW9uOiAxCglpbnQgMQoJaXR4bl9maWVsZCBWb3RlS2V5RGlsdXRpb24KCgkvLyB0ZXN0cy9jb250cmFjdHMvaXR4bnMuYWxnby50czoxMDEKCS8vIHZvdGVMYXN0OiAxCglpbnQgMQoJaXR4bl9maWVsZCBWb3RlTGFzdAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwMgoJLy8gdm90ZVBLOiAncGsnCglieXRlICJwayIKCWl0eG5fZmllbGQgVm90ZVBLCgoJLy8gdGVzdHMvY29udHJhY3RzL2l0eG5zLmFsZ28udHM6MTAzCgkvLyBmZWU6IDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoJaXR4bl9zdWJtaXQKCXJldHN1YgoKYWJpX3JvdXRlX29mZmxpbmVLZXlSZWdpc3RyYXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgb2ZmbGluZUtleVJlZ2lzdHJhdGlvbgoJaW50IDEKCXJldHVybgoKb2ZmbGluZUtleVJlZ2lzdHJhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwOAoJLy8gc2VuZE9mZmxpbmVLZXlSZWdpc3RyYXRpb24oewoJaXR4bl9iZWdpbgoJaW50IGtleXJlZwoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9pdHhucy5hbGdvLnRzOjEwOQoJLy8gZmVlOiAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCWl0eG5fc3VibWl0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoKCS8vIGRlZmF1bHQgY3JlYXRlQXBwbGljYXRpb24KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJJiYKCXJldHVybgoKcm91dGVfYWJpOgoJbWV0aG9kICJwYXltZW50KCl2b2lkIgoJbWV0aG9kICJhc3NldENyZWF0aW9uKCl1aW50NjQiCgltZXRob2QgImFwcENhbGwoKXZvaWQiCgltZXRob2QgImFzc2V0Q29uZmlnKCl2b2lkIgoJbWV0aG9kICJhc3NldEZyZWV6ZSgpdm9pZCIKCW1ldGhvZCAiYXNzZXRUcmFuc2Zlcigpdm9pZCIKCW1ldGhvZCAibWV0aG9kQ2FsbCgpdWludDY0IgoJbWV0aG9kICJvbmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQiCgltZXRob2QgIm9mZmxpbmVLZXlSZWdpc3RyYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfcGF5bWVudCBhYmlfcm91dGVfYXNzZXRDcmVhdGlvbiBhYmlfcm91dGVfYXBwQ2FsbCBhYmlfcm91dGVfYXNzZXRDb25maWcgYWJpX3JvdXRlX2Fzc2V0RnJlZXplIGFiaV9yb3V0ZV9hc3NldFRyYW5zZmVyIGFiaV9yb3V0ZV9tZXRob2RDYWxsIGFiaV9yb3V0ZV9vbmxpbmVLZXlSZWdpc3RyYXRpb24gYWJpX3JvdXRlX29mZmxpbmVLZXlSZWdpc3RyYXRpb24=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "ItxnsTest", + "desc": "", + "methods": [ + { + "name": "payment", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "assetCreation", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "appCall", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "assetConfig", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "assetFreeze", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "assetTransfer", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "methodCall", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "onlineKeyRegistration", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "offlineKeyRegistration", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/LoopsTest.json b/tests/contracts/LoopsTest.json index 828e01048..81b8ef703 100644 --- a/tests/contracts/LoopsTest.json +++ b/tests/contracts/LoopsTest.json @@ -1 +1,63 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3doaWxlTG9vcDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB3aGlsZUxvb3AKCWludCAxCglyZXR1cm4KCndoaWxlTG9vcDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9sb29wcy5hbGdvLnRzOjYKCS8vIGkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAtMSAvLyBpOiB1aW50NjQKCndoaWxlXzA6CglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMTAKCTwKCWJ6IHdoaWxlXzBfZW5kCgoJLy8gdGVzdHMvY29udHJhY3RzL2xvb3BzLmFsZ28udHM6OQoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMSAvLyBpOiB1aW50NjQKCWIgd2hpbGVfMAoKd2hpbGVfMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvbG9vcHMuYWxnby50czoxMgoJLy8gcmV0dXJuIGk7CglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9mb3JMb29wOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgZm9yTG9vcAoJaW50IDEKCXJldHVybgoKZm9yTG9vcDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9sb29wcy5hbGdvLnRzOjE2CgkvLyBpID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgLTEgLy8gaTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2xvb3BzLmFsZ28udHM6MTgKCS8vIGogPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAtMiAvLyBqOiB1aW50NjQKCmZvcl8wOgoJZnJhbWVfZGlnIC0yIC8vIGo6IHVpbnQ2NAoJaW50IDEwCgk8CglieiBmb3JfMF9lbmQKCgkvLyB0ZXN0cy9jb250cmFjdHMvbG9vcHMuYWxnby50czoxOQoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMSAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvbG9vcHMuYWxnby50czoxOAoJLy8gaiA9IGogKyAxCglmcmFtZV9kaWcgLTIgLy8gajogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMiAvLyBqOiB1aW50NjQKCWIgZm9yXzAKCmZvcl8wX2VuZDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9sb29wcy5hbGdvLnRzOjIyCgkvLyByZXR1cm4gaTsKCWZyYW1lX2RpZyAtMSAvLyBpOiB1aW50NjQKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgoJLy8gZGVmYXVsdCBjcmVhdGVBcHBsaWNhdGlvbgoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09CgkmJgoJcmV0dXJuCgpyb3V0ZV9hYmk6CgltZXRob2QgIndoaWxlTG9vcCgpdWludDY0IgoJbWV0aG9kICJmb3JMb29wKCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfd2hpbGVMb29wIGFiaV9yb3V0ZV9mb3JMb29w","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"LoopsTest","desc":"","methods":[{"name":"whileLoop","args":[],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"forLoop","args":[],"desc":"","returns":{"type":"uint64","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "whileLoop()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "forLoop()uint64": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3doaWxlTG9vcDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB3aGlsZUxvb3AKCWludCAxCglyZXR1cm4KCndoaWxlTG9vcDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9sb29wcy5hbGdvLnRzOjYKCS8vIGkgPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAtMSAvLyBpOiB1aW50NjQKCndoaWxlXzA6CglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMTAKCTwKCWJ6IHdoaWxlXzBfZW5kCgoJLy8gdGVzdHMvY29udHJhY3RzL2xvb3BzLmFsZ28udHM6OQoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMSAvLyBpOiB1aW50NjQKCWIgd2hpbGVfMAoKd2hpbGVfMF9lbmQ6CgkvLyB0ZXN0cy9jb250cmFjdHMvbG9vcHMuYWxnby50czoxMgoJLy8gcmV0dXJuIGk7CglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9mb3JMb29wOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgZm9yTG9vcAoJaW50IDEKCXJldHVybgoKZm9yTG9vcDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9sb29wcy5hbGdvLnRzOjE2CgkvLyBpID0gMAoJaW50IDAKCWZyYW1lX2J1cnkgLTEgLy8gaTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2xvb3BzLmFsZ28udHM6MTgKCS8vIGogPSAwCglpbnQgMAoJZnJhbWVfYnVyeSAtMiAvLyBqOiB1aW50NjQKCmZvcl8wOgoJZnJhbWVfZGlnIC0yIC8vIGo6IHVpbnQ2NAoJaW50IDEwCgk8CglieiBmb3JfMF9lbmQKCgkvLyB0ZXN0cy9jb250cmFjdHMvbG9vcHMuYWxnby50czoxOQoJLy8gaSA9IGkgKyAxCglmcmFtZV9kaWcgLTEgLy8gaTogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMSAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvbG9vcHMuYWxnby50czoxOAoJLy8gaiA9IGogKyAxCglmcmFtZV9kaWcgLTIgLy8gajogdWludDY0CglpbnQgMQoJKwoJZnJhbWVfYnVyeSAtMiAvLyBqOiB1aW50NjQKCWIgZm9yXzAKCmZvcl8wX2VuZDoKCS8vIHRlc3RzL2NvbnRyYWN0cy9sb29wcy5hbGdvLnRzOjIyCgkvLyByZXR1cm4gaTsKCWZyYW1lX2RpZyAtMSAvLyBpOiB1aW50NjQKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgoJLy8gZGVmYXVsdCBjcmVhdGVBcHBsaWNhdGlvbgoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgk9PQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09CgkmJgoJcmV0dXJuCgpyb3V0ZV9hYmk6CgltZXRob2QgIndoaWxlTG9vcCgpdWludDY0IgoJbWV0aG9kICJmb3JMb29wKCl1aW50NjQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfd2hpbGVMb29wIGFiaV9yb3V0ZV9mb3JMb29w", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "LoopsTest", + "desc": "", + "methods": [ + { + "name": "whileLoop", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "forLoop", + "args": [], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/MathTest.json b/tests/contracts/MathTest.json index de3f4aa72..ab87fcca9 100644 --- a/tests/contracts/MathTest.json +++ b/tests/contracts/MathTest.json @@ -1 +1,274 @@ -{"hints":{},"schema":{"local":{"declared":{},"reserved":{}},"global":{"declared":{},"reserved":{}}},"state":{"global":{"num_byte_slices":0,"num_uints":0},"local":{"num_byte_slices":0,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3U2NHBsdXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgdTY0cGx1cwoJaW50IDEKCXJldHVybgoKdTY0cGx1czoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9tYXRoLmFsZ28udHM6NgoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTY0bWludXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgdTY0bWludXMKCWludCAxCglyZXR1cm4KCnU2NG1pbnVzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoxMAoJLy8gcmV0dXJuIGEgLSBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJLQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTY0bXVsOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIHU2NG11bAoJaW50IDEKCXJldHVybgoKdTY0bXVsOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoxNAoJLy8gcmV0dXJuIGEgKiBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKgoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTY0ZGl2OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIHU2NGRpdgoJaW50IDEKCXJldHVybgoKdTY0ZGl2OgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoxOAoJLy8gcmV0dXJuIGEgLyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJLwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTI1NnBsdXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdTI1NnBsdXMKCWludCAxCglyZXR1cm4KCnUyNTZwbHVzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoyMgoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50MjU2CgliKwoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91MjU2bWludXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdTI1Nm1pbnVzCglpbnQgMQoJcmV0dXJuCgp1MjU2bWludXM6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvbWF0aC5hbGdvLnRzOjI2CgkvLyByZXR1cm4gYSAtIGI7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDI1NgoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQyNTYKCWItCglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3UyNTZtdWw6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdTI1Nm11bAoJaW50IDEKCXJldHVybgoKdTI1Nm11bDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9tYXRoLmFsZ28udHM6MzAKCS8vIHJldHVybiBhICogYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MjU2CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDI1NgoJYioKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTI1NmRpdjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiB1MjU2ZGl2CglpbnQgMQoJcmV0dXJuCgp1MjU2ZGl2OgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czozNAoJLy8gcmV0dXJuIGEgLyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50MjU2CgliLwoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91NjRSZXR1cm4yNTY6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgdTY0UmV0dXJuMjU2CglpbnQgMQoJcmV0dXJuCgp1NjRSZXR1cm4yNTY6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvbWF0aC5hbGdvLnRzOjM4CgkvLyByZXR1cm4gYSArIGI7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgkrCglpdG9iCglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX21heFU2NDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBtYXhVNjQKCWludCAxCglyZXR1cm4KCm1heFU2NDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9tYXRoLmFsZ28udHM6NDMKCS8vIGFzc2VydCgxOF80NDZfNzQ0XzA3M183MDlfNTUxXzYxNSkKCWludCAxOF80NDZfNzQ0XzA3M183MDlfNTUxXzYxNQoJYXNzZXJ0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoKCS8vIGRlZmF1bHQgY3JlYXRlQXBwbGljYXRpb24KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJJiYKCXJldHVybgoKcm91dGVfYWJpOgoJbWV0aG9kICJ1NjRwbHVzKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJbWV0aG9kICJ1NjRtaW51cyh1aW50NjQsdWludDY0KXVpbnQ2NCIKCW1ldGhvZCAidTY0bXVsKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJbWV0aG9kICJ1NjRkaXYodWludDY0LHVpbnQ2NCl1aW50NjQiCgltZXRob2QgInUyNTZwbHVzKHVpbnQyNTYsdWludDI1Nil1aW50MjU2IgoJbWV0aG9kICJ1MjU2bWludXModWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInUyNTZtdWwodWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInUyNTZkaXYodWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInU2NFJldHVybjI1Nih1aW50NjQsdWludDY0KXVpbnQyNTYiCgltZXRob2QgIm1heFU2NCgpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV91NjRwbHVzIGFiaV9yb3V0ZV91NjRtaW51cyBhYmlfcm91dGVfdTY0bXVsIGFiaV9yb3V0ZV91NjRkaXYgYWJpX3JvdXRlX3UyNTZwbHVzIGFiaV9yb3V0ZV91MjU2bWludXMgYWJpX3JvdXRlX3UyNTZtdWwgYWJpX3JvdXRlX3UyNTZkaXYgYWJpX3JvdXRlX3U2NFJldHVybjI1NiBhYmlfcm91dGVfbWF4VTY0","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"MathTest","desc":"","methods":[{"name":"u64plus","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"u64minus","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"u64mul","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"u64div","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"uint64","desc":""}},{"name":"u256plus","args":[{"name":"a","type":"uint256","desc":""},{"name":"b","type":"uint256","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}},{"name":"u256minus","args":[{"name":"a","type":"uint256","desc":""},{"name":"b","type":"uint256","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}},{"name":"u256mul","args":[{"name":"a","type":"uint256","desc":""},{"name":"b","type":"uint256","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}},{"name":"u256div","args":[{"name":"a","type":"uint256","desc":""},{"name":"b","type":"uint256","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}},{"name":"u64Return256","args":[{"name":"a","type":"uint64","desc":""},{"name":"b","type":"uint64","desc":""}],"desc":"","returns":{"type":"uint256","desc":""}},{"name":"maxU64","args":[],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "u64plus(uint64,uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "u64minus(uint64,uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "u64mul(uint64,uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "u64div(uint64,uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "u256plus(uint256,uint256)uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "u256minus(uint256,uint256)uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "u256mul(uint256,uint256)uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "u256div(uint256,uint256)uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "u64Return256(uint64,uint64)uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "maxU64()void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX3U2NHBsdXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgdTY0cGx1cwoJaW50IDEKCXJldHVybgoKdTY0cGx1czoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9tYXRoLmFsZ28udHM6NgoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTY0bWludXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgdTY0bWludXMKCWludCAxCglyZXR1cm4KCnU2NG1pbnVzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoxMAoJLy8gcmV0dXJuIGEgLSBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJLQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTY0bXVsOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIHU2NG11bAoJaW50IDEKCXJldHVybgoKdTY0bXVsOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoxNAoJLy8gcmV0dXJuIGEgKiBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJKgoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTY0ZGl2OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgljYWxsc3ViIHU2NGRpdgoJaW50IDEKCXJldHVybgoKdTY0ZGl2OgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoxOAoJLy8gcmV0dXJuIGEgLyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NAoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQ2NAoJLwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTI1NnBsdXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdTI1NnBsdXMKCWludCAxCglyZXR1cm4KCnUyNTZwbHVzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czoyMgoJLy8gcmV0dXJuIGEgKyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50MjU2CgliKwoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91MjU2bWludXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdTI1Nm1pbnVzCglpbnQgMQoJcmV0dXJuCgp1MjU2bWludXM6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvbWF0aC5hbGdvLnRzOjI2CgkvLyByZXR1cm4gYSAtIGI7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDI1NgoJZnJhbWVfZGlnIC0yIC8vIGI6IHVpbnQyNTYKCWItCglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3UyNTZtdWw6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdTI1Nm11bAoJaW50IDEKCXJldHVybgoKdTI1Nm11bDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9tYXRoLmFsZ28udHM6MzAKCS8vIHJldHVybiBhICogYjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MjU2CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDI1NgoJYioKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdTI1NmRpdjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiB1MjU2ZGl2CglpbnQgMQoJcmV0dXJuCgp1MjU2ZGl2OgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL21hdGguYWxnby50czozNAoJLy8gcmV0dXJuIGEgLyBiOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMiAvLyBiOiB1aW50MjU2CgliLwoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91NjRSZXR1cm4yNTY6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCWNhbGxzdWIgdTY0UmV0dXJuMjU2CglpbnQgMQoJcmV0dXJuCgp1NjRSZXR1cm4yNTY6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvbWF0aC5hbGdvLnRzOjM4CgkvLyByZXR1cm4gYSArIGI7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0CglmcmFtZV9kaWcgLTIgLy8gYjogdWludDY0CgkrCglpdG9iCglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX21heFU2NDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBtYXhVNjQKCWludCAxCglyZXR1cm4KCm1heFU2NDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9tYXRoLmFsZ28udHM6NDMKCS8vIGFzc2VydCgxOF80NDZfNzQ0XzA3M183MDlfNTUxXzYxNSkKCWludCAxOF80NDZfNzQ0XzA3M183MDlfNTUxXzYxNQoJYXNzZXJ0CglyZXRzdWIKCm1haW46Cgl0eG4gTnVtQXBwQXJncwoJYm56IHJvdXRlX2FiaQoKCS8vIGRlZmF1bHQgY3JlYXRlQXBwbGljYXRpb24KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJJiYKCXJldHVybgoKcm91dGVfYWJpOgoJbWV0aG9kICJ1NjRwbHVzKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJbWV0aG9kICJ1NjRtaW51cyh1aW50NjQsdWludDY0KXVpbnQ2NCIKCW1ldGhvZCAidTY0bXVsKHVpbnQ2NCx1aW50NjQpdWludDY0IgoJbWV0aG9kICJ1NjRkaXYodWludDY0LHVpbnQ2NCl1aW50NjQiCgltZXRob2QgInUyNTZwbHVzKHVpbnQyNTYsdWludDI1Nil1aW50MjU2IgoJbWV0aG9kICJ1MjU2bWludXModWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInUyNTZtdWwodWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInUyNTZkaXYodWludDI1Nix1aW50MjU2KXVpbnQyNTYiCgltZXRob2QgInU2NFJldHVybjI1Nih1aW50NjQsdWludDY0KXVpbnQyNTYiCgltZXRob2QgIm1heFU2NCgpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV91NjRwbHVzIGFiaV9yb3V0ZV91NjRtaW51cyBhYmlfcm91dGVfdTY0bXVsIGFiaV9yb3V0ZV91NjRkaXYgYWJpX3JvdXRlX3UyNTZwbHVzIGFiaV9yb3V0ZV91MjU2bWludXMgYWJpX3JvdXRlX3UyNTZtdWwgYWJpX3JvdXRlX3UyNTZkaXYgYWJpX3JvdXRlX3U2NFJldHVybjI1NiBhYmlfcm91dGVfbWF4VTY0", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "MathTest", + "desc": "", + "methods": [ + { + "name": "u64plus", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "u64minus", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "u64mul", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "u64div", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint64", + "desc": "" + } + }, + { + "name": "u256plus", + "args": [ + { + "name": "a", + "type": "uint256", + "desc": "" + }, + { + "name": "b", + "type": "uint256", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + }, + { + "name": "u256minus", + "args": [ + { + "name": "a", + "type": "uint256", + "desc": "" + }, + { + "name": "b", + "type": "uint256", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + }, + { + "name": "u256mul", + "args": [ + { + "name": "a", + "type": "uint256", + "desc": "" + }, + { + "name": "b", + "type": "uint256", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + }, + { + "name": "u256div", + "args": [ + { + "name": "a", + "type": "uint256", + "desc": "" + }, + { + "name": "b", + "type": "uint256", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + }, + { + "name": "u64Return256", + "args": [ + { + "name": "a", + "type": "uint64", + "desc": "" + }, + { + "name": "b", + "type": "uint64", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "uint256", + "desc": "" + } + }, + { + "name": "maxU64", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/StorageTest.json b/tests/contracts/StorageTest.json index 5a49bfa6e..1d248b4c3 100644 --- a/tests/contracts/StorageTest.json +++ b/tests/contracts/StorageTest.json @@ -1 +1,437 @@ -{"hints":{},"schema":{"local":{"declared":{"localRef":{"type":"bytes","key":"localRef"},"localMap":{"type":"bytes","key":"localMap"}},"reserved":{}},"global":{"declared":{"globalRef":{"type":"bytes","key":"globalRef"},"globalMap":{"type":"bytes","key":"globalMap"}},"reserved":{}}},"state":{"global":{"num_byte_slices":2,"num_uints":0},"local":{"num_byte_slices":2,"num_uints":0}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX2dsb2JhbFJlZlB1dDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBnbG9iYWxSZWZQdXQKCWludCAxCglyZXR1cm4KCmdsb2JhbFJlZlB1dDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6MTgKCS8vIHRoaXMuZ2xvYmFsUmVmLnB1dCgnYmFyJykKCWJ5dGUgImZvbyIKCWJ5dGUgImJhciIKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9nbG9iYWxSZWZHZXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgZ2xvYmFsUmVmR2V0CglpbnQgMQoJcmV0dXJuCgpnbG9iYWxSZWZHZXQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjIyCgkvLyBhc3NlcnQodGhpcy5nbG9iYWxSZWYuZ2V0KCkgPT09ICdiYXInKQoJYnl0ZSAiZm9vIgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgImJhciIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2dsb2JhbFJlZkRlbGV0ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBnbG9iYWxSZWZEZWxldGUKCWludCAxCglyZXR1cm4KCmdsb2JhbFJlZkRlbGV0ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6MjYKCS8vIHRoaXMuZ2xvYmFsUmVmLmRlbGV0ZSgpCglieXRlICJmb28iCglhcHBfZ2xvYmFsX2RlbAoJcmV0c3ViCgphYmlfcm91dGVfZ2xvYmFsUmVmRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGdsb2JhbFJlZkV4aXN0cwoJaW50IDEKCXJldHVybgoKZ2xvYmFsUmVmRXhpc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czozMAoJLy8gdGhpcy5nbG9iYWxSZWYuZXhpc3RzKCkKCXR4bmEgQXBwbGljYXRpb25zIDAKCWJ5dGUgImZvbyIKCWFwcF9nbG9iYWxfZ2V0X2V4Cglzd2FwCglwb3AKCXJldHN1YgoKYWJpX3JvdXRlX2xvY2FsUmVmUHV0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBsb2NhbFJlZlB1dAoJaW50IDEKCXJldHVybgoKbG9jYWxSZWZQdXQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjM0CgkvLyB0aGlzLmxvY2FsUmVmLnB1dChhLCAnYmFyJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglieXRlICJiYXIiCglhcHBfbG9jYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbFJlZkdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxSZWZHZXQKCWludCAxCglyZXR1cm4KCmxvY2FsUmVmR2V0OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czozOAoJLy8gYXNzZXJ0KHRoaXMubG9jYWxSZWYuZ2V0KGEpID09PSAnYmFyJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglhcHBfbG9jYWxfZ2V0CglieXRlICJiYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbFJlZkRlbGV0ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxSZWZEZWxldGUKCWludCAxCglyZXR1cm4KCmxvY2FsUmVmRGVsZXRlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo0MgoJLy8gdGhpcy5sb2NhbFJlZi5kZWxldGUoYSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglhcHBfbG9jYWxfZGVsCglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbFJlZkV4aXN0czoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxSZWZFeGlzdHMKCWludCAxCglyZXR1cm4KCmxvY2FsUmVmRXhpc3RzOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo0NgoJLy8gdGhpcy5sb2NhbFJlZi5leGlzdHMoYSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglieXRlICJmb28iCglhcHBfbG9jYWxfZ2V0X2V4Cglzd2FwCglwb3AKCXJldHN1YgoKYWJpX3JvdXRlX2JveFJlZlB1dDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hSZWZQdXQKCWludCAxCglyZXR1cm4KCmJveFJlZlB1dDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NTAKCS8vIHRoaXMuYm94UmVmLnB1dCgnYmFyJykKCWJ5dGUgImZvbyIKCWJ5dGUgImJhciIKCWJveF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2JveFJlZkdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hSZWZHZXQKCWludCAxCglyZXR1cm4KCmJveFJlZkdldDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NTQKCS8vIGFzc2VydCh0aGlzLmJveFJlZi5nZXQoKSA9PT0gJ2JhcicpCglieXRlICJmb28iCglib3hfZ2V0Cglhc3NlcnQKCWJ5dGUgImJhciIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2JveFJlZkRlbGV0ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hSZWZEZWxldGUKCWludCAxCglyZXR1cm4KCmJveFJlZkRlbGV0ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NTgKCS8vIHRoaXMuYm94UmVmLmRlbGV0ZSgpCglieXRlICJmb28iCglib3hfZGVsCglyZXRzdWIKCmFiaV9yb3V0ZV9ib3hSZWZFeGlzdHM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYm94UmVmRXhpc3RzCglpbnQgMQoJcmV0dXJuCgpib3hSZWZFeGlzdHM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjYyCgkvLyB0aGlzLmJveFJlZi5leGlzdHMoKQoJYnl0ZSAiZm9vIgoJYm94X2dldAoJc3dhcAoJcG9wCglyZXRzdWIKCmFiaV9yb3V0ZV9nbG9iYWxNYXBQdXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgZ2xvYmFsTWFwUHV0CglpbnQgMQoJcmV0dXJuCgpnbG9iYWxNYXBQdXQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjY2CgkvLyB0aGlzLmdsb2JhbE1hcC5wdXQoJ2ZvbycsICdiYXInKQoJYnl0ZSAiZm9vIgoJYnl0ZSAiYmFyIgoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2dsb2JhbE1hcEdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBnbG9iYWxNYXBHZXQKCWludCAxCglyZXR1cm4KCmdsb2JhbE1hcEdldDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NzAKCS8vIGFzc2VydCh0aGlzLmdsb2JhbE1hcC5nZXQoJ2ZvbycpID09PSAnYmFyJykKCWJ5dGUgImZvbyIKCWFwcF9nbG9iYWxfZ2V0CglieXRlICJiYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9nbG9iYWxNYXBEZWxldGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgZ2xvYmFsTWFwRGVsZXRlCglpbnQgMQoJcmV0dXJuCgpnbG9iYWxNYXBEZWxldGU6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjc0CgkvLyB0aGlzLmdsb2JhbE1hcC5kZWxldGUoJ2ZvbycpCglieXRlICJmb28iCglhcHBfZ2xvYmFsX2RlbAoJcmV0c3ViCgphYmlfcm91dGVfZ2xvYmFsTWFwRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGdsb2JhbE1hcEV4aXN0cwoJaW50IDEKCXJldHVybgoKZ2xvYmFsTWFwRXhpc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo3OAoJLy8gdGhpcy5nbG9iYWxNYXAuZXhpc3RzKCdmb28nKQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAiZm9vIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoJcmV0c3ViCgphYmlfcm91dGVfbG9jYWxNYXBQdXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGxvY2FsTWFwUHV0CglpbnQgMQoJcmV0dXJuCgpsb2NhbE1hcFB1dDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6ODIKCS8vIHRoaXMubG9jYWxNYXAucHV0KGEsICdmb28nLCAnYmFyJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglieXRlICJiYXIiCglhcHBfbG9jYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbE1hcEdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxNYXBHZXQKCWludCAxCglyZXR1cm4KCmxvY2FsTWFwR2V0OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo4NgoJLy8gYXNzZXJ0KHRoaXMubG9jYWxNYXAuZ2V0KGEsICdmb28nKSA9PT0gJ2JhcicpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYnl0ZSAiZm9vIgoJYXBwX2xvY2FsX2dldAoJYnl0ZSAiYmFyIgoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfbG9jYWxNYXBEZWxldGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGxvY2FsTWFwRGVsZXRlCglpbnQgMQoJcmV0dXJuCgpsb2NhbE1hcERlbGV0ZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6OTAKCS8vIHRoaXMubG9jYWxNYXAuZGVsZXRlKGEsICdmb28nKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWJ5dGUgImZvbyIKCWFwcF9sb2NhbF9kZWwKCXJldHN1YgoKYWJpX3JvdXRlX2xvY2FsTWFwRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBsb2NhbE1hcEV4aXN0cwoJaW50IDEKCXJldHVybgoKbG9jYWxNYXBFeGlzdHM6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjk0CgkvLyB0aGlzLmxvY2FsTWFwLmV4aXN0cyhhLCAnZm9vJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglieXRlICJmb28iCglhcHBfbG9jYWxfZ2V0X2V4Cglzd2FwCglwb3AKCXJldHN1YgoKYWJpX3JvdXRlX2JveE1hcFB1dDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hNYXBQdXQKCWludCAxCglyZXR1cm4KCmJveE1hcFB1dDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6OTgKCS8vIHRoaXMuYm94TWFwLnB1dCgnZm9vJywgJ2JhcicpCglieXRlICJmb28iCglieXRlICJiYXIiCglib3hfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9ib3hNYXBHZXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYm94TWFwR2V0CglpbnQgMQoJcmV0dXJuCgpib3hNYXBHZXQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjEwMgoJLy8gYXNzZXJ0KHRoaXMuYm94TWFwLmdldCgnZm9vJykgPT09ICdiYXInKQoJYnl0ZSAiZm9vIgoJYm94X2dldAoJYXNzZXJ0CglieXRlICJiYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9ib3hNYXBEZWxldGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYm94TWFwRGVsZXRlCglpbnQgMQoJcmV0dXJuCgpib3hNYXBEZWxldGU6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjEwNgoJLy8gdGhpcy5ib3hNYXAuZGVsZXRlKCdmb28nKQoJYnl0ZSAiZm9vIgoJYm94X2RlbAoJcmV0c3ViCgphYmlfcm91dGVfYm94TWFwRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGJveE1hcEV4aXN0cwoJaW50IDEKCXJldHVybgoKYm94TWFwRXhpc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czoxMTAKCS8vIHRoaXMuYm94TWFwLmV4aXN0cygnZm9vJykKCWJ5dGUgImZvbyIKCWJveF9nZXQKCXN3YXAKCXBvcAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiZ2xvYmFsUmVmUHV0KCl2b2lkIgoJbWV0aG9kICJnbG9iYWxSZWZHZXQoKXZvaWQiCgltZXRob2QgImdsb2JhbFJlZkRlbGV0ZSgpdm9pZCIKCW1ldGhvZCAiZ2xvYmFsUmVmRXhpc3RzKCl2b2lkIgoJbWV0aG9kICJsb2NhbFJlZlB1dChhY2NvdW50KXZvaWQiCgltZXRob2QgImxvY2FsUmVmR2V0KGFjY291bnQpdm9pZCIKCW1ldGhvZCAibG9jYWxSZWZEZWxldGUoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJsb2NhbFJlZkV4aXN0cyhhY2NvdW50KXZvaWQiCgltZXRob2QgImJveFJlZlB1dCgpdm9pZCIKCW1ldGhvZCAiYm94UmVmR2V0KCl2b2lkIgoJbWV0aG9kICJib3hSZWZEZWxldGUoKXZvaWQiCgltZXRob2QgImJveFJlZkV4aXN0cygpdm9pZCIKCW1ldGhvZCAiZ2xvYmFsTWFwUHV0KCl2b2lkIgoJbWV0aG9kICJnbG9iYWxNYXBHZXQoKXZvaWQiCgltZXRob2QgImdsb2JhbE1hcERlbGV0ZSgpdm9pZCIKCW1ldGhvZCAiZ2xvYmFsTWFwRXhpc3RzKCl2b2lkIgoJbWV0aG9kICJsb2NhbE1hcFB1dChhY2NvdW50KXZvaWQiCgltZXRob2QgImxvY2FsTWFwR2V0KGFjY291bnQpdm9pZCIKCW1ldGhvZCAibG9jYWxNYXBEZWxldGUoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJsb2NhbE1hcEV4aXN0cyhhY2NvdW50KXZvaWQiCgltZXRob2QgImJveE1hcFB1dCgpdm9pZCIKCW1ldGhvZCAiYm94TWFwR2V0KCl2b2lkIgoJbWV0aG9kICJib3hNYXBEZWxldGUoKXZvaWQiCgltZXRob2QgImJveE1hcEV4aXN0cygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9nbG9iYWxSZWZQdXQgYWJpX3JvdXRlX2dsb2JhbFJlZkdldCBhYmlfcm91dGVfZ2xvYmFsUmVmRGVsZXRlIGFiaV9yb3V0ZV9nbG9iYWxSZWZFeGlzdHMgYWJpX3JvdXRlX2xvY2FsUmVmUHV0IGFiaV9yb3V0ZV9sb2NhbFJlZkdldCBhYmlfcm91dGVfbG9jYWxSZWZEZWxldGUgYWJpX3JvdXRlX2xvY2FsUmVmRXhpc3RzIGFiaV9yb3V0ZV9ib3hSZWZQdXQgYWJpX3JvdXRlX2JveFJlZkdldCBhYmlfcm91dGVfYm94UmVmRGVsZXRlIGFiaV9yb3V0ZV9ib3hSZWZFeGlzdHMgYWJpX3JvdXRlX2dsb2JhbE1hcFB1dCBhYmlfcm91dGVfZ2xvYmFsTWFwR2V0IGFiaV9yb3V0ZV9nbG9iYWxNYXBEZWxldGUgYWJpX3JvdXRlX2dsb2JhbE1hcEV4aXN0cyBhYmlfcm91dGVfbG9jYWxNYXBQdXQgYWJpX3JvdXRlX2xvY2FsTWFwR2V0IGFiaV9yb3V0ZV9sb2NhbE1hcERlbGV0ZSBhYmlfcm91dGVfbG9jYWxNYXBFeGlzdHMgYWJpX3JvdXRlX2JveE1hcFB1dCBhYmlfcm91dGVfYm94TWFwR2V0IGFiaV9yb3V0ZV9ib3hNYXBEZWxldGUgYWJpX3JvdXRlX2JveE1hcEV4aXN0cw==","clear":"I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"},"contract":{"name":"StorageTest","desc":"","methods":[{"name":"globalRefPut","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalRefGet","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalRefDelete","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalRefExists","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"localRefPut","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"localRefGet","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"localRefDelete","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"localRefExists","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxRefPut","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxRefGet","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxRefDelete","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxRefExists","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalMapPut","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalMapGet","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalMapDelete","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"globalMapExists","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"localMapPut","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"localMapGet","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"localMapDelete","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"localMapExists","args":[{"name":"a","type":"account","desc":""}],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxMapPut","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxMapGet","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxMapDelete","args":[],"desc":"","returns":{"type":"void","desc":""}},{"name":"boxMapExists","args":[],"desc":"","returns":{"type":"void","desc":""}}]}} \ No newline at end of file +{ + "hints": { + "globalRefPut()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalRefGet()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalRefDelete()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalRefExists()void": { + "call_config": { + "no_op": "CALL" + } + }, + "localRefPut(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "localRefGet(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "localRefDelete(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "localRefExists(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxRefPut()void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxRefGet()void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxRefDelete()void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxRefExists()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalMapPut()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalMapGet()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalMapDelete()void": { + "call_config": { + "no_op": "CALL" + } + }, + "globalMapExists()void": { + "call_config": { + "no_op": "CALL" + } + }, + "localMapPut(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "localMapGet(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "localMapDelete(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "localMapExists(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxMapPut()void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxMapGet()void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxMapDelete()void": { + "call_config": { + "no_op": "CALL" + } + }, + "boxMapExists()void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "bare_call_config": {}, + "schema": { + "local": { + "declared": { + "localRef": { + "type": "bytes", + "key": "localRef" + }, + "localMap": { + "type": "bytes", + "key": "localMap" + } + }, + "reserved": {} + }, + "global": { + "declared": { + "globalRef": { + "type": "bytes", + "key": "globalRef" + }, + "globalMap": { + "type": "bytes", + "key": "globalMap" + } + }, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 2, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 2, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKYWJpX3JvdXRlX2dsb2JhbFJlZlB1dDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBnbG9iYWxSZWZQdXQKCWludCAxCglyZXR1cm4KCmdsb2JhbFJlZlB1dDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6MTgKCS8vIHRoaXMuZ2xvYmFsUmVmLnB1dCgnYmFyJykKCWJ5dGUgImZvbyIKCWJ5dGUgImJhciIKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9nbG9iYWxSZWZHZXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgZ2xvYmFsUmVmR2V0CglpbnQgMQoJcmV0dXJuCgpnbG9iYWxSZWZHZXQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjIyCgkvLyBhc3NlcnQodGhpcy5nbG9iYWxSZWYuZ2V0KCkgPT09ICdiYXInKQoJYnl0ZSAiZm9vIgoJYXBwX2dsb2JhbF9nZXQKCWJ5dGUgImJhciIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2dsb2JhbFJlZkRlbGV0ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBnbG9iYWxSZWZEZWxldGUKCWludCAxCglyZXR1cm4KCmdsb2JhbFJlZkRlbGV0ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6MjYKCS8vIHRoaXMuZ2xvYmFsUmVmLmRlbGV0ZSgpCglieXRlICJmb28iCglhcHBfZ2xvYmFsX2RlbAoJcmV0c3ViCgphYmlfcm91dGVfZ2xvYmFsUmVmRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGdsb2JhbFJlZkV4aXN0cwoJaW50IDEKCXJldHVybgoKZ2xvYmFsUmVmRXhpc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czozMAoJLy8gdGhpcy5nbG9iYWxSZWYuZXhpc3RzKCkKCXR4bmEgQXBwbGljYXRpb25zIDAKCWJ5dGUgImZvbyIKCWFwcF9nbG9iYWxfZ2V0X2V4Cglzd2FwCglwb3AKCXJldHN1YgoKYWJpX3JvdXRlX2xvY2FsUmVmUHV0OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBsb2NhbFJlZlB1dAoJaW50IDEKCXJldHVybgoKbG9jYWxSZWZQdXQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjM0CgkvLyB0aGlzLmxvY2FsUmVmLnB1dChhLCAnYmFyJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglieXRlICJiYXIiCglhcHBfbG9jYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbFJlZkdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxSZWZHZXQKCWludCAxCglyZXR1cm4KCmxvY2FsUmVmR2V0OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czozOAoJLy8gYXNzZXJ0KHRoaXMubG9jYWxSZWYuZ2V0KGEpID09PSAnYmFyJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglhcHBfbG9jYWxfZ2V0CglieXRlICJiYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbFJlZkRlbGV0ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxSZWZEZWxldGUKCWludCAxCglyZXR1cm4KCmxvY2FsUmVmRGVsZXRlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo0MgoJLy8gdGhpcy5sb2NhbFJlZi5kZWxldGUoYSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglhcHBfbG9jYWxfZGVsCglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbFJlZkV4aXN0czoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxSZWZFeGlzdHMKCWludCAxCglyZXR1cm4KCmxvY2FsUmVmRXhpc3RzOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo0NgoJLy8gdGhpcy5sb2NhbFJlZi5leGlzdHMoYSkKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglieXRlICJmb28iCglhcHBfbG9jYWxfZ2V0X2V4Cglzd2FwCglwb3AKCXJldHN1YgoKYWJpX3JvdXRlX2JveFJlZlB1dDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hSZWZQdXQKCWludCAxCglyZXR1cm4KCmJveFJlZlB1dDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NTAKCS8vIHRoaXMuYm94UmVmLnB1dCgnYmFyJykKCWJ5dGUgImZvbyIKCWJ5dGUgImJhciIKCWJveF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2JveFJlZkdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hSZWZHZXQKCWludCAxCglyZXR1cm4KCmJveFJlZkdldDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NTQKCS8vIGFzc2VydCh0aGlzLmJveFJlZi5nZXQoKSA9PT0gJ2JhcicpCglieXRlICJmb28iCglib3hfZ2V0Cglhc3NlcnQKCWJ5dGUgImJhciIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX2JveFJlZkRlbGV0ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hSZWZEZWxldGUKCWludCAxCglyZXR1cm4KCmJveFJlZkRlbGV0ZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NTgKCS8vIHRoaXMuYm94UmVmLmRlbGV0ZSgpCglieXRlICJmb28iCglib3hfZGVsCglyZXRzdWIKCmFiaV9yb3V0ZV9ib3hSZWZFeGlzdHM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYm94UmVmRXhpc3RzCglpbnQgMQoJcmV0dXJuCgpib3hSZWZFeGlzdHM6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjYyCgkvLyB0aGlzLmJveFJlZi5leGlzdHMoKQoJYnl0ZSAiZm9vIgoJYm94X2dldAoJc3dhcAoJcG9wCglyZXRzdWIKCmFiaV9yb3V0ZV9nbG9iYWxNYXBQdXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgZ2xvYmFsTWFwUHV0CglpbnQgMQoJcmV0dXJuCgpnbG9iYWxNYXBQdXQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjY2CgkvLyB0aGlzLmdsb2JhbE1hcC5wdXQoJ2ZvbycsICdiYXInKQoJYnl0ZSAiZm9vIgoJYnl0ZSAiYmFyIgoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKYWJpX3JvdXRlX2dsb2JhbE1hcEdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBnbG9iYWxNYXBHZXQKCWludCAxCglyZXR1cm4KCmdsb2JhbE1hcEdldDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6NzAKCS8vIGFzc2VydCh0aGlzLmdsb2JhbE1hcC5nZXQoJ2ZvbycpID09PSAnYmFyJykKCWJ5dGUgImZvbyIKCWFwcF9nbG9iYWxfZ2V0CglieXRlICJiYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9nbG9iYWxNYXBEZWxldGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgZ2xvYmFsTWFwRGVsZXRlCglpbnQgMQoJcmV0dXJuCgpnbG9iYWxNYXBEZWxldGU6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjc0CgkvLyB0aGlzLmdsb2JhbE1hcC5kZWxldGUoJ2ZvbycpCglieXRlICJmb28iCglhcHBfZ2xvYmFsX2RlbAoJcmV0c3ViCgphYmlfcm91dGVfZ2xvYmFsTWFwRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGdsb2JhbE1hcEV4aXN0cwoJaW50IDEKCXJldHVybgoKZ2xvYmFsTWFwRXhpc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo3OAoJLy8gdGhpcy5nbG9iYWxNYXAuZXhpc3RzKCdmb28nKQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAiZm9vIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoJcmV0c3ViCgphYmlfcm91dGVfbG9jYWxNYXBQdXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGxvY2FsTWFwUHV0CglpbnQgMQoJcmV0dXJuCgpsb2NhbE1hcFB1dDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6ODIKCS8vIHRoaXMubG9jYWxNYXAucHV0KGEsICdmb28nLCAnYmFyJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50CglieXRlICJmb28iCglieXRlICJiYXIiCglhcHBfbG9jYWxfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9sb2NhbE1hcEdldDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoJdHhuYXMgQWNjb3VudHMKCWNhbGxzdWIgbG9jYWxNYXBHZXQKCWludCAxCglyZXR1cm4KCmxvY2FsTWFwR2V0OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czo4NgoJLy8gYXNzZXJ0KHRoaXMubG9jYWxNYXAuZ2V0KGEsICdmb28nKSA9PT0gJ2JhcicpCglmcmFtZV9kaWcgLTEgLy8gYTogYWNjb3VudAoJYnl0ZSAiZm9vIgoJYXBwX2xvY2FsX2dldAoJYnl0ZSAiYmFyIgoJPT0KCWFzc2VydAoJcmV0c3ViCgphYmlfcm91dGVfbG9jYWxNYXBEZWxldGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCXR4bmFzIEFjY291bnRzCgljYWxsc3ViIGxvY2FsTWFwRGVsZXRlCglpbnQgMQoJcmV0dXJuCgpsb2NhbE1hcERlbGV0ZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6OTAKCS8vIHRoaXMubG9jYWxNYXAuZGVsZXRlKGEsICdmb28nKQoJZnJhbWVfZGlnIC0xIC8vIGE6IGFjY291bnQKCWJ5dGUgImZvbyIKCWFwcF9sb2NhbF9kZWwKCXJldHN1YgoKYWJpX3JvdXRlX2xvY2FsTWFwRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgl0eG5hcyBBY2NvdW50cwoJY2FsbHN1YiBsb2NhbE1hcEV4aXN0cwoJaW50IDEKCXJldHVybgoKbG9jYWxNYXBFeGlzdHM6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjk0CgkvLyB0aGlzLmxvY2FsTWFwLmV4aXN0cyhhLCAnZm9vJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBhY2NvdW50Cgl0eG5hIEFwcGxpY2F0aW9ucyAwCglieXRlICJmb28iCglhcHBfbG9jYWxfZ2V0X2V4Cglzd2FwCglwb3AKCXJldHN1YgoKYWJpX3JvdXRlX2JveE1hcFB1dDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJY2FsbHN1YiBib3hNYXBQdXQKCWludCAxCglyZXR1cm4KCmJveE1hcFB1dDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9zdG9yYWdlLmFsZ28udHM6OTgKCS8vIHRoaXMuYm94TWFwLnB1dCgnZm9vJywgJ2JhcicpCglieXRlICJmb28iCglieXRlICJiYXIiCglib3hfcHV0CglyZXRzdWIKCmFiaV9yb3V0ZV9ib3hNYXBHZXQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYm94TWFwR2V0CglpbnQgMQoJcmV0dXJuCgpib3hNYXBHZXQ6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjEwMgoJLy8gYXNzZXJ0KHRoaXMuYm94TWFwLmdldCgnZm9vJykgPT09ICdiYXInKQoJYnl0ZSAiZm9vIgoJYm94X2dldAoJYXNzZXJ0CglieXRlICJiYXIiCgk9PQoJYXNzZXJ0CglyZXRzdWIKCmFiaV9yb3V0ZV9ib3hNYXBEZWxldGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgYm94TWFwRGVsZXRlCglpbnQgMQoJcmV0dXJuCgpib3hNYXBEZWxldGU6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvc3RvcmFnZS5hbGdvLnRzOjEwNgoJLy8gdGhpcy5ib3hNYXAuZGVsZXRlKCdmb28nKQoJYnl0ZSAiZm9vIgoJYm94X2RlbAoJcmV0c3ViCgphYmlfcm91dGVfYm94TWFwRXhpc3RzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIGJveE1hcEV4aXN0cwoJaW50IDEKCXJldHVybgoKYm94TWFwRXhpc3RzOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL3N0b3JhZ2UuYWxnby50czoxMTAKCS8vIHRoaXMuYm94TWFwLmV4aXN0cygnZm9vJykKCWJ5dGUgImZvbyIKCWJveF9nZXQKCXN3YXAKCXBvcAoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCgkvLyBkZWZhdWx0IGNyZWF0ZUFwcGxpY2F0aW9uCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCSYmCglyZXR1cm4KCnJvdXRlX2FiaToKCW1ldGhvZCAiZ2xvYmFsUmVmUHV0KCl2b2lkIgoJbWV0aG9kICJnbG9iYWxSZWZHZXQoKXZvaWQiCgltZXRob2QgImdsb2JhbFJlZkRlbGV0ZSgpdm9pZCIKCW1ldGhvZCAiZ2xvYmFsUmVmRXhpc3RzKCl2b2lkIgoJbWV0aG9kICJsb2NhbFJlZlB1dChhY2NvdW50KXZvaWQiCgltZXRob2QgImxvY2FsUmVmR2V0KGFjY291bnQpdm9pZCIKCW1ldGhvZCAibG9jYWxSZWZEZWxldGUoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJsb2NhbFJlZkV4aXN0cyhhY2NvdW50KXZvaWQiCgltZXRob2QgImJveFJlZlB1dCgpdm9pZCIKCW1ldGhvZCAiYm94UmVmR2V0KCl2b2lkIgoJbWV0aG9kICJib3hSZWZEZWxldGUoKXZvaWQiCgltZXRob2QgImJveFJlZkV4aXN0cygpdm9pZCIKCW1ldGhvZCAiZ2xvYmFsTWFwUHV0KCl2b2lkIgoJbWV0aG9kICJnbG9iYWxNYXBHZXQoKXZvaWQiCgltZXRob2QgImdsb2JhbE1hcERlbGV0ZSgpdm9pZCIKCW1ldGhvZCAiZ2xvYmFsTWFwRXhpc3RzKCl2b2lkIgoJbWV0aG9kICJsb2NhbE1hcFB1dChhY2NvdW50KXZvaWQiCgltZXRob2QgImxvY2FsTWFwR2V0KGFjY291bnQpdm9pZCIKCW1ldGhvZCAibG9jYWxNYXBEZWxldGUoYWNjb3VudCl2b2lkIgoJbWV0aG9kICJsb2NhbE1hcEV4aXN0cyhhY2NvdW50KXZvaWQiCgltZXRob2QgImJveE1hcFB1dCgpdm9pZCIKCW1ldGhvZCAiYm94TWFwR2V0KCl2b2lkIgoJbWV0aG9kICJib3hNYXBEZWxldGUoKXZvaWQiCgltZXRob2QgImJveE1hcEV4aXN0cygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9nbG9iYWxSZWZQdXQgYWJpX3JvdXRlX2dsb2JhbFJlZkdldCBhYmlfcm91dGVfZ2xvYmFsUmVmRGVsZXRlIGFiaV9yb3V0ZV9nbG9iYWxSZWZFeGlzdHMgYWJpX3JvdXRlX2xvY2FsUmVmUHV0IGFiaV9yb3V0ZV9sb2NhbFJlZkdldCBhYmlfcm91dGVfbG9jYWxSZWZEZWxldGUgYWJpX3JvdXRlX2xvY2FsUmVmRXhpc3RzIGFiaV9yb3V0ZV9ib3hSZWZQdXQgYWJpX3JvdXRlX2JveFJlZkdldCBhYmlfcm91dGVfYm94UmVmRGVsZXRlIGFiaV9yb3V0ZV9ib3hSZWZFeGlzdHMgYWJpX3JvdXRlX2dsb2JhbE1hcFB1dCBhYmlfcm91dGVfZ2xvYmFsTWFwR2V0IGFiaV9yb3V0ZV9nbG9iYWxNYXBEZWxldGUgYWJpX3JvdXRlX2dsb2JhbE1hcEV4aXN0cyBhYmlfcm91dGVfbG9jYWxNYXBQdXQgYWJpX3JvdXRlX2xvY2FsTWFwR2V0IGFiaV9yb3V0ZV9sb2NhbE1hcERlbGV0ZSBhYmlfcm91dGVfbG9jYWxNYXBFeGlzdHMgYWJpX3JvdXRlX2JveE1hcFB1dCBhYmlfcm91dGVfYm94TWFwR2V0IGFiaV9yb3V0ZV9ib3hNYXBEZWxldGUgYWJpX3JvdXRlX2JveE1hcEV4aXN0cw==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu" + }, + "contract": { + "name": "StorageTest", + "desc": "", + "methods": [ + { + "name": "globalRefPut", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalRefGet", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalRefDelete", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalRefExists", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localRefPut", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localRefGet", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localRefDelete", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localRefExists", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxRefPut", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxRefGet", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxRefDelete", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxRefExists", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalMapPut", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalMapGet", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalMapDelete", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "globalMapExists", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localMapPut", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localMapGet", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localMapDelete", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "localMapExists", + "args": [ + { + "name": "a", + "type": "account", + "desc": "" + } + ], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxMapPut", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxMapGet", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxMapDelete", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + }, + { + "name": "boxMapExists", + "args": [], + "desc": "", + "returns": { + "type": "void", + "desc": "" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/clients/abitest_client.ts b/tests/contracts/clients/abitest_client.ts index 4f4cbf07f..768b88681 100644 --- a/tests/contracts/clients/abitest_client.ts +++ b/tests/contracts/clients/abitest_client.ts @@ -4,7 +4,7 @@ export class AbiTest extends bkr.ApplicationClient { desc: string = ""; override appSchema: bkr.Schema = { declared: { gRef: { type: bkr.AVMType.bytes, key: "gRef", desc: "", static: false }, gMap: { type: bkr.AVMType.bytes, key: "gMap", desc: "", static: false } }, reserved: {} }; override acctSchema: bkr.Schema = { declared: { lRef: { type: bkr.AVMType.bytes, key: "lRef", desc: "", static: false }, lMap: { type: bkr.AVMType.bytes, key: "lMap", desc: "", static: false } }, reserved: {} }; - override approvalProgram: string = "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDMgMQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gaGVhZCBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQgb2YgZWxlbWVudAoJaW50IDAKCXN3YXAKCWV4dHJhY3QzIC8vIGV4dHJhY3QgcG9ydGlvbiBvZiB0dXBsZSBiZWZvcmUgZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIG5ldyB0dXBsZSBlbGVtZW50Cgljb25jYXQKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0xIC8vIGhlYWQgb2Zmc2V0CglleHRyYWN0X3VpbnQxNiAvLyBleHRyYWN0IGR5bmFtaWMgYXJyYXkgb2Zmc2V0IG9mIGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCSsKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsZW4KCXN1YnN0cmluZzMKCWNvbmNhdAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCTwKCWJueiBzd2FwcGVkX2RpZmZlcmVuY2UKCWZyYW1lX2RpZyAtMiAvLyBuZXcgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBuZXcgZWxlbWVudAoJZnJhbWVfZGlnIC0zIC8vIG9sZCBlbGVtZW50IGxlbmd0aAoJaW50IDEKCXN0b3JlIDcgLy8gc3VidHJhY3QgaGVhZCBkaWZmZXJlbmNlCgliIGdldF9kaWZmZXJlbmNlCgpzd2FwcGVkX2RpZmZlcmVuY2U6CglmcmFtZV9kaWcgLTMgLy8gb2xkIGVsZW1lbnQgbGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWludCAwCglzdG9yZSA3IC8vIHN1YnRyYWN0IGhlYWQgZGlmZmVyZW5jZQoKZ2V0X2RpZmZlcmVuY2U6CgktIC8vIGdldCBsZW5ndGggZGlmZmVyZW5jZQoJcmV0c3ViCgp1cGRhdGVfZHluYW1pY19oZWFkOgoJcHJvdG8gMiAwCglmcmFtZV9kaWcgLTIgLy8gbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gZHluYW1pYyBhcnJheSBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQKCWxvYWQgNyAvLyBzdWJ0cmFjdCBoZWFkIGRpZmZlcmVuY2UKCWJ6IHN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZQoJKyAvLyBhZGQgZGlmZmVyZW5jZSB0byBvZmZzZXQKCWIgZW5kX2NhbGNfbmV3X2hlYWQKCnN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZToKCXN3YXAKCS0gLy8gc3VidHJhY3QgZGlmZmVyZW5jZSBmcm9tIG9mZmV0CgplbmRfY2FsY19uZXdfaGVhZDoKCWl0b2IgLy8gY29udmVydCB0byBieXRlcwoJZXh0cmFjdCA2IDIgLy8gY29udmVydCB0byB1aW50MTYKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglzd2FwCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0Cglzd2FwCglyZXBsYWNlMyAvLyB1cGRhdGUgb2Zmc2V0CglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCXJldHN1YgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYmFyZV9yb3V0ZV9PcHRJbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBPcHRJbgoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgb3B0SW4KCWludCAxCglyZXR1cm4KCm9wdEluOgoJcHJvdG8gMCAwCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBzdGF0aWNBcnJheQoJaW50IDEKCXJldHVybgoKc3RhdGljQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjkKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RhdGljQXJyYXlBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgc3RhdGljQXJyYXlBcmcKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5QXJnOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwbiAzCgljYWxsc3ViIG5vbkxpdGVyYWxTdGF0aWNBcnJheUVsZW1lbnRzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NQoJLy8gbjEgPSAxMQoJaW50IDExCglmcmFtZV9idXJ5IC0xIC8vIG4xOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDYKCS8vIG4yID0gMjIKCWludCAyMgoJZnJhbWVfYnVyeSAtMiAvLyBuMjogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ3CgkvLyBuMyA9IDMzCglpbnQgMzMKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFtuMSwgbjIsIG4zXQoJZnJhbWVfZGlnIC0xIC8vIG4xOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9taXhlZFN0YXRpY0FycmF5RWxlbWVudHM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cG4gMwoJY2FsbHN1YiBtaXhlZFN0YXRpY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCm1peGVkU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NAoJLy8gbjEgPSAzCglpbnQgMwoJZnJhbWVfYnVyeSAtMSAvLyBuMTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU1CgkvLyBuMiA9IDQKCWludCA0CglmcmFtZV9idXJ5IC0yIC8vIG4yOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTYKCS8vIG4zID0gNQoJaW50IDUKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NwoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCA5PiA9IFswLCAxLCAyLCBuMSwgbjIsIG4zLCA2LCA3LCA4XQoJaW50IDAKCWl0b2IKCWludCAxCglpdG9iCgljb25jYXQKCWludCAyCglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBuMTogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWludCA2CglpdG9iCgljb25jYXQKCWludCA3CglpdG9iCgljb25jYXQKCWludCA4CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzldCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU5CgkvLyByZXR1cm4gYVsxXSArIGFbNF0gKyBhWzddOwoJZnJhbWVfZGlnIC00IC8vIGE6IHVpbnQ2NFs5XQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbOV0KCWludCA0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCgkrCglmcmFtZV9kaWcgLTQgLy8gYTogdWludDY0WzldCglpbnQgNwoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJKwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3M6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NjMKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NAoJLy8gbiA9IDIKCWludCAyCglmcmFtZV9idXJ5IC0yIC8vIG46IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NgoJLy8gcmV0dXJuIGFbbl07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglmcmFtZV9kaWcgLTIgLy8gbjogdWludDY0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2V0U3RhdGljQXJyYXlFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzAKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo3MgoJLy8gYVsxXSA9IDIyMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMjIyCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzQKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgc3RhdGljQXJyYXlJblN0b3JhZ2VSZWYKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjc4CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODAKCS8vIHRoaXMuZ1JlZi5wdXQoYSkKCWJ5dGUgImdSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MQoJLy8gdGhpcy5sUmVmLnB1dCh0aGlzLnR4bi5zZW5kZXIsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MgoJLy8gdGhpcy5iUmVmLnB1dChhKQoJYnl0ZSAiYlJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODQKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdSZWYiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiUmVmIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjkwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmCglpbnQgMQoJcmV0dXJuCgp1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo5NAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjk2CgkvLyB0aGlzLmdSZWYucHV0KGEpCglieXRlICJnUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTcKCS8vIHRoaXMubFJlZi5wdXQodGhpcy50eG4uc2VuZGVyLCBhKQoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTgKCS8vIHRoaXMuYlJlZi5wdXQoYSkKCWJ5dGUgImJSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwMAoJLy8gdGhpcy5nUmVmLmdldCgpWzFdID0gMTExCglieXRlICJnUmVmIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMQoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImdSZWYiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMDEKCS8vIHRoaXMubFJlZi5nZXQodGhpcy50eG4uc2VuZGVyKVsxXSA9IDIyMgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyMgoJaXRvYgoJcmVwbGFjZTMKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCgl1bmNvdmVyIDIKCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTAyCgkvLyB0aGlzLmJSZWYuZ2V0KClbMV0gPSAzMzMKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMwoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImJSZWYiCglzd2FwCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwNAoJLy8gcmV0OiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWwoJYnl0ZSAiZ1JlZiIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTIgLy8gcmV0OiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTEwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHN0YXRpY0FycmF5SW5TdG9yYWdlTWFwCglpbnQgMQoJcmV0dXJuCgpzdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTQKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTYKCS8vIHRoaXMuZ01hcC5wdXQoJ2dNYXAnLCBhKQoJYnl0ZSAiZ01hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9nbG9iYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExNwoJLy8gdGhpcy5sTWFwLnB1dCh0aGlzLnR4bi5zZW5kZXIsICdsTWFwJywgYSkKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfbG9jYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExOAoJLy8gdGhpcy5iTWFwLnB1dCgnYk1hcCcsIGEpCglieXRlICJiTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMjAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEyNgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiB1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZU1hcAoJaW50IDEKCXJldHVybgoKdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMwCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMyCgkvLyB0aGlzLmdNYXAucHV0KCdnTWFwJywgYSkKCWJ5dGUgImdNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzMKCS8vIHRoaXMubE1hcC5wdXQodGhpcy50eG4uc2VuZGVyLCAnbE1hcCcsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzQKCS8vIHRoaXMuYk1hcC5wdXQoJ2JNYXAnLCBhKQoJYnl0ZSAiYk1hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM2CgkvLyB0aGlzLmdNYXAuZ2V0KCdnTWFwJylbMV0gPSAxMTExCglieXRlICJnTWFwIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMTEKCWl0b2IKCXJlcGxhY2UzCglieXRlICJnTWFwIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM3CgkvLyB0aGlzLmxNYXAuZ2V0KHRoaXMudHhuLnNlbmRlciwgJ2xNYXAnKVsxXSA9IDIyMjIKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMjIyCglpdG9iCglyZXBsYWNlMwoJdHhuIFNlbmRlcgoJYnl0ZSAibE1hcCIKCXVuY292ZXIgMgoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzgKCS8vIHRoaXMuYk1hcC5nZXQoJ2JNYXAnKVsxXSA9IDMzMzMKCWJ5dGUgImJNYXAiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMzMKCWl0b2IKCXJlcGxhY2UzCglieXRlICJiTWFwIgoJc3dhcAoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbmVzdGVkU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgbmVzdGVkU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCm5lc3RlZFN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MAoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDY0LCAzPiwgMz4gPSBbWzExLCAyMiwgMzNdLCBbNDQsIDU1LCA2Nl0sIFs3NywgODgsIDk5XV0KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglpbnQgNDQKCWl0b2IKCWludCA1NQoJaXRvYgoJY29uY2F0CglpbnQgNjYKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWludCA4OAoJaXRvYgoJY29uY2F0CglpbnQgOTkKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTIKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheUVsZW1lbnQKCWludCAxCglyZXR1cm4KCnVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTYKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU4CgkvLyBhWzFdWzFdID0gNTU1CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA1NTUKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjAKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5CglpbnQgMQoJcmV0dXJuCgp1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjQKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTY2CgkvLyBhWzFdID0gWzQ0NCwgNTU1LCA2NjZdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgNDQ0CglpdG9iCglpbnQgNTU1CglpdG9iCgljb25jYXQKCWludCA2NjYKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdWzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2OAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHRocmVlRGltZW5zaW9uYWxVaW50MTZBcnJheQoJaW50IDEKCXJldHVybgoKdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE3MgoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDE2LCAyPiwgMj4sIDI+ID0gWwoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDY2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzYKCS8vIGFbMV1bMV0gPSBbNzc3LCA4ODhdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2WzJdWzJdWzJdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAxCglpbnQgNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDc3NwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA4ODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzgKCS8vIHJldHVybiBhWzFdWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCAxCglpbnQgMiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NpbXBsZVR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNpbXBsZVR1cGxlCglpbnQgMQoJcmV0dXJuCgpzaW1wbGVUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxODIKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0LCB1aW50MTZdID0gWzExLCAyMiwgMzMsIDQ0XQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMTQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NCx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE4NAoJLy8gcmV0dXJuIGFbM107CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0LHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMTgKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheUluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlJblR1cGxlCglpbnQgMQoJcmV0dXJuCgphcnJheUluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTg4CgkvLyBhOiBbdWludDY0LCB1aW50MTYsIFN0YXRpY0FycmF5PHVpbnQ2NCwgMj4sIHVpbnQxNl0gPSBbCglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAxYwoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxMQoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAzMwoJaXRvYgoJaW50IDQ0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NFsyXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE5MgoJLy8gcmV0dXJuIGFbMl1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0WzJdLHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMTAKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90dXBsZUluQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdHVwbGVJbkFycmF5CglpbnQgMQoJcmV0dXJuCgp0dXBsZUluQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTk2CgkvLyBhOiBTdGF0aWNBcnJheTxbdWludDY0LCB1aW50MTZdLCAyPiA9IFsKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDExCglpdG9iCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGEKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTZdWzJdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIwMAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTZdWzJdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCWludCAxMCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCSsKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90dXBsZUluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdHVwbGVJblR1cGxlCglpbnQgMQoJcmV0dXJuCgp0dXBsZUluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjA0CgkvLyBhOiBbdWludDE2LCB1aW50MTYsIFt1aW50NjQsIHVpbnQxNl0sIFt1aW50MTYsIHVpbnQ2NF1dID0gWwoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMTgKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGEKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgNjYKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDE2LFt1aW50NjQsdWludDE2XSxbdWludDE2LHVpbnQ2NF1dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIwOAoJLy8gcmV0dXJuIGFbM11bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50MTYsW3VpbnQ2NCx1aW50MTZdLFt1aW50MTYsdWludDY0XV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMTQKCWludCAyCgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3Nob3J0VHlwZU5vdGF0aW9uOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNob3J0VHlwZU5vdGF0aW9uCglpbnQgMQoJcmV0dXJuCgpzaG9ydFR5cGVOb3RhdGlvbjoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMTIKCS8vIGE6IFt1aW50MTY8Mj4sIHVpbnQ2NDwyPiwgdWludDE2PDI+XSA9IFsKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDE4CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAzMwoJaXRvYgoJaW50IDQ0CglpdG9iCgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDY2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNlsyXSx1aW50NjRbMl0sdWludDE2WzJdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMTYKCS8vIHJldHVybiBhWzJdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0WzJdLHVpbnQxNlsyXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMjAKCWludCAxCglpbnQgMiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2Rpc2d1c3Rpbmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgZGlzZ3VzdGluZwoJaW50IDEKCXJldHVybgoKZGlzZ3VzdGluZzoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMjAKCS8vIGE6IFN0YXRpY0FycmF5PFt1aW50MTY8Mj4sIHVpbnQ2NCwgW3VpbnQxNiwgdWludDY0XSwgU3RhdGljQXJyYXk8dWludDY0PDI+LCAyPl0sIDI+ID0gWwoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMzYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMzCglpdG9iCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgNjYKCWl0b2IKCWludCA3NwoJaXRvYgoJY29uY2F0CglpbnQgODgKCWl0b2IKCWludCA5OQoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMzYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMzCglpdG9iCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDQ0NAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDU1NQoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCA2NjYKCWl0b2IKCWludCA3NzcKCWl0b2IKCWNvbmNhdAoJaW50IDg4OAoJaXRvYgoJaW50IDk5OQoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIyNQoJLy8gYVsxXVszXVsxXSA9IFs4ODg4LCA5OTk5XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCWludCA1NCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyCgkrCglpbnQgMQoJaW50IDE2IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgODg4OAoJaXRvYgoJaW50IDk5OTkKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNlsyXSx1aW50NjQsW3VpbnQxNix1aW50NjRdLHVpbnQ2NFsyXVsyXV1bMl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjI2CgkvLyByZXR1cm4gYVsxXVszXVsxXVswXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2WzJdLHVpbnQ2NCxbdWludDE2LHVpbnQ2NF0sdWludDY0WzJdWzJdXVsyXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgNTQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMgoJKwoJaW50IDEKCWludCAxNiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDAKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVyblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHJldHVyblR1cGxlCglpbnQgMQoJcmV0dXJuCgpyZXR1cm5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMzAKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0XSA9IFsxMSwgMjIsIDMzXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMTIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIzMQoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0XQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdHVwbGVBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgdHVwbGVBcmcKCWludCAxCglyZXR1cm4KCnR1cGxlQXJnOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIzNQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0XQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA4CglpbnQgMgoJZXh0cmFjdDMKCWJ5dGUgMHhGRkZGCgliJgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGR5bmFtaWNBcnJheQoJaW50IDEKCXJldHVybgoKZHluYW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIzOQoJLy8gYTogdWludDY0W10gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI0MQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiByZXR1cm5EeW5hbWljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVybkR5bmFtaWNBcnJheToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNDUKCS8vIGE6IHVpbnQ2NFtdID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNDYKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9keW5hbWljQXJyYXlBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgZHluYW1pY0FycmF5QXJnCglpbnQgMQoJcmV0dXJuCgpkeW5hbWljQXJyYXlBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjUwCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5RWxlbWVudDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50CglpbnQgMQoJcmV0dXJuCgp1cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI1NAoJLy8gYTogdWludDY0W10gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI1NgoJLy8gYVsxXSA9IDIyMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIyMgoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjU4CgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY1R1cGxlQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgZHluYW1pY1R1cGxlQXJyYXkKCWludCAxCglyZXR1cm4KCmR5bmFtaWNUdXBsZUFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI2MgoJLy8gYTogW3VpbnQxNiwgdWludDY0XVtdID0gW1sxMSwgMjJdLCBbMzMsIDQ0XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDBhCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGEKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMzMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCA0NAoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0Cgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50NjRdW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjY0CgkvLyByZXR1cm4gYVsxXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ2NF1bXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMTAgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblR1cGxlV2l0aER5YW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI2OAoJLy8gYTogW3VpbnQ2NCwgdWludDE2LCB1aW50NjRbXSwgdWludDE2W11dID0gWzEsIDIsIFszLCA0XSwgWzUsIDZdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMGUKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMKCWl0b2IKCWludCA0CglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjcwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiByZXR1cm5EeW5hbWljQXJyYXlGcm9tVHVwbGUKCWludCAxCglyZXR1cm4KCnJldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNzQKCS8vIGE6IFt1aW50OCwgdWludDE2LCB1aW50OFtdLCB1aW50MTZbXSwgdWludDhbXV0gPSBbMSwgMiwgWzMsIDRdLCBbNSwgNl0sIFs3LCA4XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA5CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCA3CglpdG9iCglleHRyYWN0IDcgMAoJaW50IDgKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTYsdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNzYKCS8vIHJldHVybiBhWzRdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTYsdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZQoJaW50IDEKCXJldHVybgoKdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyODAKCS8vIGE6IFt1aW50OCwgdWludDE2W10sIHVpbnQ4W10sIHVpbnQxNltdLCB1aW50OFtdXSA9IFs5LCBbOF0sIFs3XSwgWzZdLCBbNV1dCglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwOQoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCA5CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgOAoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4MgoJLy8gYVswXSA9IDk5IGFzIHVpbnQ4CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJaW50IDk5CglpdG9iCglleHRyYWN0IDcgMAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjgzCgkvLyBhWzFdID0gWzEwLCAxMV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDEwCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgMQoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgMwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNQoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyODQKCS8vIGFbMl0gPSBbMTIsIDEzXQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDMKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgMTIKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgMTMKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4NQoJLy8gYVszXSA9IFsxNCwgMTVdCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNQoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg2CgkvLyBhWzRdID0gWzE2LCAxN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDE2CglpdG9iCglleHRyYWN0IDcgMAoJaW50IDE3CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgNwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyODgKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9ub25MaXRlcmFsRHluYW1pY0VsZW1lbnRJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZQoJaW50IDEKCXJldHVybgoKbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyOTIKCS8vIGU6IHVpbnQxNltdID0gWzUsIDZdCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGU6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI5MwoJLy8gYTogW3VpbnQ4LCB1aW50MTYsIHVpbnQ4W10sIHVpbnQxNltdLCB1aW50OFtdXSA9IFsxLCAyLCBbMywgNF0sIGUsIFs3LCA4XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA5CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJZnJhbWVfZGlnIC0xIC8vIGU6IHVpbnQxNltdCglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDcKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgOAoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI5NQoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVB1c2g6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQdXNoCglpbnQgMQoJcmV0dXJuCgphcnJheVB1c2g6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjk5CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMDEKCS8vIGEucHVzaCgzIGFzIHVpbnQxNikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJZXh0cmFjdCAyIDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzAzCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYXJyYXlQb3A6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQb3AKCWludCAxCglyZXR1cm4KCmFycmF5UG9wOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwNwoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwOQoJLy8gYS5wb3AoKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTEKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVBvcFZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgYXJyYXlQb3BWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlQb3BWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTUKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTcKCS8vIHYgPSBhLnBvcCgpIQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZHVwCglsZW4KCWludCAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWNvdmVyIDIKCWV4dHJhY3QzCglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC0yIC8vIHY6IHVpbnQxNgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTkKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNgoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhcnJheVNwbGljZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2U6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzIzCgkvLyBhOiB1aW50NjRbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWludCAyCglpdG9iCgljb25jYXQKCWludCAzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzI1CgkvLyBhLnNwbGljZSgxLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDEKCWludCA4CgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDgKCSoKCWludCA4CgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMjcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZVZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDMKCWNhbGxzdWIgYXJyYXlTcGxpY2VWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2VWYWx1ZToKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzEKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgOAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAxMAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMGEKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzMKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzM0CgkvLyBsID0gNwoJaW50IDcKCWZyYW1lX2J1cnkgLTMgLy8gbDogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNQoJLy8gdiA9IGEuc3BsaWNlKGksIGwpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJZnJhbWVfZGlnIC0zIC8vIGw6IHVpbnQ2NAoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpdG9iCglleHRyYWN0IDYgMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWludCAyCgktCglleHRyYWN0MwoJY29uY2F0Cglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC00IC8vIHY6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNwoJLy8gcmV0dXJuIHY7CglmcmFtZV9kaWcgLTQgLy8gdjogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBcnJheUVsZW1lbnRzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgZHluYW1pY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBcnJheUVsZW1lbnRzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MQoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MgoJLy8gbmV3QTogdWludDE2W10gPSBbYVswXSwgYVsxXSwgYVsyXV0KCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDAKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMQoJaW50IDIgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCWV4dHJhY3QzCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIG5ld0E6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0NAoJLy8gcmV0dXJuIG5ld0E7CglmcmFtZV9kaWcgLTIgLy8gbmV3QTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNwbGljZUxhc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNDgKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNTAKCS8vIGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1MgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50VmFsdWU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiBzcGxpY2VMYXN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudFZhbHVlOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1NgoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1OAoJLy8gdiA9IGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMTMgLy8gc3BsaWNlIGJ5dGUgbGVuZ3RoCglpbnQgMgoJLQoJZXh0cmFjdDMKCWNvbmNhdAoJc3dhcAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoJZnJhbWVfYnVyeSAtMiAvLyB2OiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjAKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3BsaWNlRmlyc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY0CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY2CgkvLyBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjgKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHNwbGljZUZpcnN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzIKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzQKCS8vIHYgPSBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJaW50IDIKCS0KCWV4dHJhY3QzCgljb25jYXQKCXN3YXAKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCWZyYW1lX2J1cnkgLTIgLy8gdjogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzc2CgkvLyByZXR1cm4gdjsKCWZyYW1lX2RpZyAtMiAvLyB2OiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RyaW5nUmV0dXJuOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIHN0cmluZ1JldHVybgoJaW50IDEKCXJldHVybgoKc3RyaW5nUmV0dXJuOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM4MAoJLy8gcmV0dXJuICdIZWxsbyBXb3JsZCEnOwoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0FyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgc3RyaW5nQXJnCglpbnQgMQoJcmV0dXJuCgpzdHJpbmdBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzg0CgkvLyBhc3NlcnQocyA9PT0gJ0hlbGxvIFdvcmxkIScpCglmcmFtZV9kaWcgLTEgLy8gczogYnl0ZXMKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3RyaW5nSW5UdXBsZQoJaW50IDEKCXJldHVybgoKc3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozODgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHN0cmluZywgdWludDhbXV0gPSBbMSwgWzJdLCAnSGVsbG8gV29ybGQhJywgWzNdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDgKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzkwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hY2Nlc1N0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYWNjZXNTdHJpbmdJblR1cGxlCglpbnQgMQoJcmV0dXJuCgphY2Nlc1N0cmluZ0luVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzk0CgkvLyBhOiBbdWludDE2LCB1aW50OFtdLCBzdHJpbmcsIHVpbnQ4W11dID0gWzEsIFsyXSwgJ0hlbGxvIFdvcmxkIScsIFszXV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA4CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDcgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM5NgoJLy8gYXNzZXJ0KGFbMl0gPT09ICdIZWxsbyBXb3JsZCEnKQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJPT0KCWFzc2VydAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTgKCS8vIHJldHVybiBhWzJdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZVN0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlU3RyaW5nSW5UdXBsZQoJaW50IDEKCXJldHVybgoKdXBkYXRlU3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDIKCS8vIGE6IFt1aW50OCwgdWludDE2W10sIHN0cmluZywgdWludDE2W10sIHVpbnQ4W11dID0gWzksIFs4XSwgJ0hpPycsIFs2XSwgWzVdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDkKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgOQoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDgKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAiSGk/IgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA0CgkvLyBhWzBdID0gOTkgYXMgdWludDgKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCWludCA5OQoJaXRvYgoJZXh0cmFjdCA3IDAKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA1CgkvLyBhWzFdID0gWzEwLCAxMV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgMTAKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAxCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA2CgkvLyBhWzJdID0gJ0hlbGxvIFdvcmxkIScKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDMKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDMKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDcKCS8vIGFbM10gPSBbMTQsIDE1XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNQoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDgKCS8vIGFbNF0gPSBbMTYsIDE3XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNwoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZVR1cGxlV2l0aE9ubHlEeW5hbWljVHlwZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcwoJaW50IDEKCXJldHVybgoKdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTQKCS8vIGE6IFt1aW50MTZbXSwgdWludDE2W10sIHVpbnQxNltdXSA9IFtbMV0sIFsyXSwgWzNdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDE2CgkvLyBhWzBdID0gWzQsIDVdCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAwCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDQKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTcKCS8vIGFbMV0gPSBbNiwgN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQxOAoJLy8gYVsyXSA9IFs4LCA5XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgNAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA4CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCA0CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDIwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zaG9ydGVuRHluYW1pY0VsZW1lbnRJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGUKCWludCAxCglyZXR1cm4KCnNob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDI0CgkvLyBhOiBbdWludDE2W10sIHVpbnQxNltdLCB1aW50MTZbXV0gPSBbWzEsIDJdLCBbMiwgM10sIFszLCA0XV0KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA2CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQyNgoJLy8gYVswXSA9IFs1XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA1CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjcKCS8vIGFbMV0gPSBbNl0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWludCAyCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA0CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDI4CgkvLyBhWzJdID0gWzddCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA0Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCXN0b3JlIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxvYWQgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDcKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglpbnQgNAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQzMAoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbmFtZWRUdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBuYW1lZFR1cGxlCglpbnQgMQoJcmV0dXJuCgpuYW1lZFR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQzNAoJLy8gYTogewoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHsgZm9vOiB1aW50MTYsIGJhcjogc3RyaW5nLCB9CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ0MgoJLy8gcmV0dXJuIGEuYmFyOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHsgZm9vOiB1aW50MTYsIGJhcjogc3RyaW5nLCB9CglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVOYW1lZFR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZU5hbWVkVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZU5hbWVkVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDQ2CgkvLyBhOiB7CglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNAoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglieXRlICJIaT8iCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDU0CgkvLyBhLmJhciA9ICdIZWxsbyBXb3JsZCEnCglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiB7IGZvbzogdWludDE2LCBiYXI6IHN0cmluZywgfQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NTYKCS8vIHJldHVybiBhLmJhcjsKCWZyYW1lX2RpZyAtMSAvLyBhOiB7IGZvbzogdWludDE2LCBiYXI6IHN0cmluZywgfQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfY3VzdG9tVHlwZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgY3VzdG9tVHlwZXMKCWludCAxCglyZXR1cm4KCmN1c3RvbVR5cGVzOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ2MAoJLy8gYWE6IEN1c3RvbVR5cGUgPSB7CglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNAoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglieXRlICJIaT8iCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDY1CgkvLyBhYS5iYXIgPSAnSGVsbG8gV29ybGQhJwoJZnJhbWVfZGlnIC0xIC8vIGFhOiBDdXN0b21UeXBlCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJc3RvcmUgNCAvLyBvbGQgdHVwbGUgZWxlbWVudAoJbG9hZCA0IC8vIG9sZCB0dXBsZSBlbGVtZW50CglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDY3CgkvLyByZXR1cm4gYWEuYmFyOwoJZnJhbWVfZGlnIC0xIC8vIGFhOiBDdXN0b21UeXBlCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNTdHJpbmdBcnJheUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBzdGF0aWNTdHJpbmdBcnJheUFyZwoJaW50IDEKCXJldHVybgoKc3RhdGljU3RyaW5nQXJyYXlBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDcxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMgoJKgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBkeW5hbWljQWNjZXNzT2ZEeW5hbWljRWxlbWVudEluU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NzUKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDc2CgkvLyByZXR1cm4gYVtpXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQoJaW50IDEKCXJldHVybgoKZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4MAoJLy8gYTogW3VpbnQxNiwgdWludDhbXSwgdWludDE2XSA9IFsxLCBbMl0sIDNdCglieXRlIDB4CglkdXAKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglieXRlIDB4MDAwNgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWR1cAoJbGVuCglsb2FkIDIgLy8gaGVhZCBvZmZzZXQKCWJ0b2kKCSsKCWl0b2IKCWV4dHJhY3QgNiAyCglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJc3dhcAoJY29uY2F0CglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0ODIKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hY2Nlc3NEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlCglpbnQgMQoJcmV0dXJuCgphY2Nlc3NEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDg2CgkvLyBhOiBbdWludDE2LCB1aW50OFtdLCB1aW50MTZdID0gWzEsIFsyXSwgM10KCWJ5dGUgMHgKCWR1cAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglzdG9yZSAxIC8vIHR1cGxlIHRhaWwKCWJ5dGUgMHgwMDA2CglzdG9yZSAyIC8vIGhlYWQgb2Zmc2V0Cglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyCglpdG9iCglleHRyYWN0IDcgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJZHVwCglsZW4KCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDEgLy8gdHVwbGUgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4OAoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZQoJaW50IDEKCXJldHVybgoKYWNjZXNzRHluYW1pY0FycmF5RWxlbWVudEluVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDkyCgkvLyBhOiBbdWludDE2LCB1aW50OFtdXSA9IFsxMSwgWzIyLCAzMywgNDRdXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDQKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMiAvLyBoZWFkIG9mZnNldAoJY29uY2F0CglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAzMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ5NAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWludCAxCglpbnQgMSAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCgkrCglpbnQgMQoJZXh0cmFjdDMKCWJ5dGUgMHhGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OTgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHVpbnQxNl0gPSBbMSwgWzJdLCAzXQoJYnl0ZSAweAoJZHVwCglzdG9yZSAwIC8vIHR1cGxlIGhlYWQKCXN0b3JlIDEgLy8gdHVwbGUgdGFpbAoJYnl0ZSAweDAwMDYKCXN0b3JlIDIgLy8gaGVhZCBvZmZzZXQKCWxvYWQgMCAvLyB0dXBsZSBoZWFkCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJc3RvcmUgMCAvLyB0dXBsZSBoZWFkCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0Cgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglkdXAKCWxlbgoJbG9hZCAyIC8vIGhlYWQgb2Zmc2V0CglidG9pCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3RvcmUgMiAvLyBoZWFkIG9mZnNldAoJbG9hZCAxIC8vIHR1cGxlIHRhaWwKCXN3YXAKCWNvbmNhdAoJc3RvcmUgMSAvLyB0dXBsZSB0YWlsCglsb2FkIDAgLy8gdHVwbGUgaGVhZAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXN0b3JlIDAgLy8gdHVwbGUgaGVhZAoJbG9hZCAwIC8vIHR1cGxlIGhlYWQKCWxvYWQgMSAvLyB0dXBsZSB0YWlsCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTAwCgkvLyBhWzFdID0gWzQsIDVdCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglzdG9yZSA0IC8vIG9sZCB0dXBsZSBlbGVtZW50Cglsb2FkIDQgLy8gb2xkIHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAyCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwMgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKbWFpbjoKCXR4biBOdW1BcHBBcmdzCglibnogcm91dGVfYWJpCgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCT09CglibnogYmFyZV9yb3V0ZV9jcmVhdGUKCXR4biBPbkNvbXBsZXRpb24KCWludCBPcHRJbgoJPT0KCWludCAxCgltYXRjaCBiYXJlX3JvdXRlX09wdEluCgpyb3V0ZV9hYmk6CgltZXRob2QgInN0YXRpY0FycmF5KCl1aW50NjQiCgltZXRob2QgInJldHVyblN0YXRpY0FycmF5KCl1aW50NjRbM10iCgltZXRob2QgInN0YXRpY0FycmF5QXJnKHVpbnQ2NFszXSl1aW50NjQiCgltZXRob2QgIm5vbkxpdGVyYWxTdGF0aWNBcnJheUVsZW1lbnRzKCl1aW50NjQiCgltZXRob2QgIm1peGVkU3RhdGljQXJyYXlFbGVtZW50cygpdWludDY0IgoJbWV0aG9kICJub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3MoKXVpbnQ2NCIKCW1ldGhvZCAic2V0U3RhdGljQXJyYXlFbGVtZW50KCl1aW50NjQiCgltZXRob2QgInN0YXRpY0FycmF5SW5TdG9yYWdlUmVmKCl1aW50NjRbM10iCgltZXRob2QgInVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmKCl1aW50NjRbM10iCgltZXRob2QgInN0YXRpY0FycmF5SW5TdG9yYWdlTWFwKCl1aW50NjRbM10iCgltZXRob2QgInVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlTWFwKCl1aW50NjRbM10iCgltZXRob2QgIm5lc3RlZFN0YXRpY0FycmF5KCl1aW50NjQiCgltZXRob2QgInVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudCgpdWludDY0IgoJbWV0aG9kICJ1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheSgpdWludDY0IgoJbWV0aG9kICJ0aHJlZURpbWVuc2lvbmFsVWludDE2QXJyYXkoKXVpbnQxNiIKCW1ldGhvZCAic2ltcGxlVHVwbGUoKXVpbnQxNiIKCW1ldGhvZCAiYXJyYXlJblR1cGxlKCl1aW50NjQiCgltZXRob2QgInR1cGxlSW5BcnJheSgpdWludDE2IgoJbWV0aG9kICJ0dXBsZUluVHVwbGUoKXVpbnQ2NCIKCW1ldGhvZCAic2hvcnRUeXBlTm90YXRpb24oKXVpbnQxNiIKCW1ldGhvZCAiZGlzZ3VzdGluZygpdWludDY0IgoJbWV0aG9kICJyZXR1cm5UdXBsZSgpKHVpbnQ2NCx1aW50MTYsdWludDY0KSIKCW1ldGhvZCAidHVwbGVBcmcoKHVpbnQ2NCx1aW50MTYsdWludDY0KSl1aW50MTYiCgltZXRob2QgImR5bmFtaWNBcnJheSgpdWludDY0IgoJbWV0aG9kICJyZXR1cm5EeW5hbWljQXJyYXkoKXVpbnQ2NFtdIgoJbWV0aG9kICJkeW5hbWljQXJyYXlBcmcodWludDY0W10pdWludDY0IgoJbWV0aG9kICJ1cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50KCl1aW50NjQiCgltZXRob2QgImR5bmFtaWNUdXBsZUFycmF5KCl1aW50NjQiCgltZXRob2QgInJldHVyblR1cGxlV2l0aER5YW1pY0FycmF5KCkodWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXSkiCgltZXRob2QgInJldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZSgpdWludDhbXSIKCW1ldGhvZCAidXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZSgpKHVpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXSkiCgltZXRob2QgIm5vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGUoKSh1aW50OCx1aW50MTYsdWludDhbXSx1aW50MTZbXSx1aW50OFtdKSIKCW1ldGhvZCAiYXJyYXlQdXNoKCl1aW50MTZbXSIKCW1ldGhvZCAiYXJyYXlQb3AoKXVpbnQxNltdIgoJbWV0aG9kICJhcnJheVBvcFZhbHVlKCl1aW50MTYiCgltZXRob2QgImFycmF5U3BsaWNlKCl1aW50NjRbXSIKCW1ldGhvZCAiYXJyYXlTcGxpY2VWYWx1ZSgpdWludDE2W10iCgltZXRob2QgImR5bmFtaWNBcnJheUVsZW1lbnRzKCl1aW50MTZbXSIKCW1ldGhvZCAic3BsaWNlTGFzdEVsZW1lbnQoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VMYXN0RWxlbWVudFZhbHVlKCl1aW50MTZbXSIKCW1ldGhvZCAic3BsaWNlRmlyc3RFbGVtZW50KCl1aW50MTZbXSIKCW1ldGhvZCAic3BsaWNlRmlyc3RFbGVtZW50VmFsdWUoKXVpbnQxNltdIgoJbWV0aG9kICJzdHJpbmdSZXR1cm4oKXN0cmluZyIKCW1ldGhvZCAic3RyaW5nQXJnKHN0cmluZyl2b2lkIgoJbWV0aG9kICJzdHJpbmdJblR1cGxlKCkodWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W10pIgoJbWV0aG9kICJhY2Nlc1N0cmluZ0luVHVwbGUoKXN0cmluZyIKCW1ldGhvZCAidXBkYXRlU3RyaW5nSW5UdXBsZSgpKHVpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdKSIKCW1ldGhvZCAidXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcygpKHVpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdKSIKCW1ldGhvZCAic2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZSgpKHVpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdKSIKCW1ldGhvZCAibmFtZWRUdXBsZSgpc3RyaW5nIgoJbWV0aG9kICJ1cGRhdGVOYW1lZFR1cGxlKClzdHJpbmciCgltZXRob2QgImN1c3RvbVR5cGVzKClzdHJpbmciCgltZXRob2QgInN0YXRpY1N0cmluZ0FycmF5QXJnKHN0cmluZ1szXSlzdHJpbmciCgltZXRob2QgImR5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheShzdHJpbmdbM10pc3RyaW5nIgoJbWV0aG9kICJkeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUoKSh1aW50MTYsdWludDhbXSx1aW50MTYpIgoJbWV0aG9kICJhY2Nlc3NEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUoKXVpbnQ4W10iCgltZXRob2QgImFjY2Vzc0R5bmFtaWNBcnJheUVsZW1lbnRJblR1cGxlKCl1aW50MzIiCgltZXRob2QgInVwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSgpKHVpbnQxNix1aW50OFtdLHVpbnQxNikiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCBhYmlfcm91dGVfc3RhdGljQXJyYXkgYWJpX3JvdXRlX3JldHVyblN0YXRpY0FycmF5IGFiaV9yb3V0ZV9zdGF0aWNBcnJheUFyZyBhYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5RWxlbWVudHMgYWJpX3JvdXRlX21peGVkU3RhdGljQXJyYXlFbGVtZW50cyBhYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzIGFiaV9yb3V0ZV9zZXRTdGF0aWNBcnJheUVsZW1lbnQgYWJpX3JvdXRlX3N0YXRpY0FycmF5SW5TdG9yYWdlUmVmIGFiaV9yb3V0ZV91cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZiBhYmlfcm91dGVfc3RhdGljQXJyYXlJblN0b3JhZ2VNYXAgYWJpX3JvdXRlX3VwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlTWFwIGFiaV9yb3V0ZV9uZXN0ZWRTdGF0aWNBcnJheSBhYmlfcm91dGVfdXBkYXRlTmVzdGVkU3RhdGljQXJyYXlFbGVtZW50IGFiaV9yb3V0ZV91cGRhdGVOZXN0ZWRTdGF0aWNBcnJheSBhYmlfcm91dGVfdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5IGFiaV9yb3V0ZV9zaW1wbGVUdXBsZSBhYmlfcm91dGVfYXJyYXlJblR1cGxlIGFiaV9yb3V0ZV90dXBsZUluQXJyYXkgYWJpX3JvdXRlX3R1cGxlSW5UdXBsZSBhYmlfcm91dGVfc2hvcnRUeXBlTm90YXRpb24gYWJpX3JvdXRlX2Rpc2d1c3RpbmcgYWJpX3JvdXRlX3JldHVyblR1cGxlIGFiaV9yb3V0ZV90dXBsZUFyZyBhYmlfcm91dGVfZHluYW1pY0FycmF5IGFiaV9yb3V0ZV9yZXR1cm5EeW5hbWljQXJyYXkgYWJpX3JvdXRlX2R5bmFtaWNBcnJheUFyZyBhYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5RWxlbWVudCBhYmlfcm91dGVfZHluYW1pY1R1cGxlQXJyYXkgYWJpX3JvdXRlX3JldHVyblR1cGxlV2l0aER5YW1pY0FycmF5IGFiaV9yb3V0ZV9yZXR1cm5EeW5hbWljQXJyYXlGcm9tVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluVHVwbGUgYWJpX3JvdXRlX25vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGUgYWJpX3JvdXRlX2FycmF5UHVzaCBhYmlfcm91dGVfYXJyYXlQb3AgYWJpX3JvdXRlX2FycmF5UG9wVmFsdWUgYWJpX3JvdXRlX2FycmF5U3BsaWNlIGFiaV9yb3V0ZV9hcnJheVNwbGljZVZhbHVlIGFiaV9yb3V0ZV9keW5hbWljQXJyYXlFbGVtZW50cyBhYmlfcm91dGVfc3BsaWNlTGFzdEVsZW1lbnQgYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50VmFsdWUgYWJpX3JvdXRlX3NwbGljZUZpcnN0RWxlbWVudCBhYmlfcm91dGVfc3BsaWNlRmlyc3RFbGVtZW50VmFsdWUgYWJpX3JvdXRlX3N0cmluZ1JldHVybiBhYmlfcm91dGVfc3RyaW5nQXJnIGFiaV9yb3V0ZV9zdHJpbmdJblR1cGxlIGFiaV9yb3V0ZV9hY2Nlc1N0cmluZ0luVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZVN0cmluZ0luVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZVR1cGxlV2l0aE9ubHlEeW5hbWljVHlwZXMgYWJpX3JvdXRlX3Nob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGUgYWJpX3JvdXRlX25hbWVkVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZU5hbWVkVHVwbGUgYWJpX3JvdXRlX2N1c3RvbVR5cGVzIGFiaV9yb3V0ZV9zdGF0aWNTdHJpbmdBcnJheUFyZyBhYmlfcm91dGVfZHluYW1pY0FjY2Vzc09mRHluYW1pY0VsZW1lbnRJblN0YXRpY0FycmF5IGFiaV9yb3V0ZV9keW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUgYWJpX3JvdXRlX2FjY2Vzc0R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSBhYmlfcm91dGVfYWNjZXNzRHluYW1pY0FycmF5RWxlbWVudEluVHVwbGUgYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQ=="; + override approvalProgram: string = "I3ByYWdtYSB2ZXJzaW9uIDgKCWIgbWFpbgoKdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDMgMQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gaGVhZCBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQgb2YgZWxlbWVudAoJaW50IDAKCXN3YXAKCWV4dHJhY3QzIC8vIGV4dHJhY3QgcG9ydGlvbiBvZiB0dXBsZSBiZWZvcmUgZWxlbWVudAoJZnJhbWVfZGlnIC0yIC8vIG5ldyB0dXBsZSBlbGVtZW50Cgljb25jYXQKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfZGlnIC0xIC8vIGhlYWQgb2Zmc2V0CglleHRyYWN0X3VpbnQxNiAvLyBleHRyYWN0IGR5bmFtaWMgYXJyYXkgb2Zmc2V0IG9mIGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCSsKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglsZW4KCXN1YnN0cmluZzMKCWNvbmNhdAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWZyYW1lX2RpZyAtMyAvLyBvbGQgZWxlbWVudCBsZW5ndGgKCTwKCWJueiBzd2FwcGVkX2RpZmZlcmVuY2UKCWZyYW1lX2RpZyAtMiAvLyBuZXcgdHVwbGUgZWxlbWVudAoJbGVuIC8vIGxlbmd0aCBvZiBuZXcgZWxlbWVudAoJZnJhbWVfZGlnIC0zIC8vIG9sZCBlbGVtZW50IGxlbmd0aAoJaW50IDEKCXN0b3JlIDcgLy8gc3VidHJhY3QgaGVhZCBkaWZmZXJlbmNlCgliIGdldF9kaWZmZXJlbmNlCgpzd2FwcGVkX2RpZmZlcmVuY2U6CglmcmFtZV9kaWcgLTMgLy8gb2xkIGVsZW1lbnQgbGVuZ3RoCglmcmFtZV9kaWcgLTIgLy8gbmV3IHR1cGxlIGVsZW1lbnQKCWxlbiAvLyBsZW5ndGggb2YgbmV3IGVsZW1lbnQKCWludCAwCglzdG9yZSA3IC8vIHN1YnRyYWN0IGhlYWQgZGlmZmVyZW5jZQoKZ2V0X2RpZmZlcmVuY2U6CgktIC8vIGdldCBsZW5ndGggZGlmZmVyZW5jZQoJcmV0c3ViCgp1cGRhdGVfZHluYW1pY19oZWFkOgoJcHJvdG8gMiAwCglmcmFtZV9kaWcgLTIgLy8gbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9kaWcgLTEgLy8gZHluYW1pYyBhcnJheSBvZmZzZXQKCWV4dHJhY3RfdWludDE2IC8vIGV4dHJhY3QgZHluYW1pYyBhcnJheSBvZmZzZXQKCWxvYWQgNyAvLyBzdWJ0cmFjdCBoZWFkIGRpZmZlcmVuY2UKCWJ6IHN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZQoJKyAvLyBhZGQgZGlmZmVyZW5jZSB0byBvZmZzZXQKCWIgZW5kX2NhbGNfbmV3X2hlYWQKCnN1YnRyYWN0X2hlYWRfZGlmZmVyZW5jZToKCXN3YXAKCS0gLy8gc3VidHJhY3QgZGlmZmVyZW5jZSBmcm9tIG9mZmV0CgplbmRfY2FsY19uZXdfaGVhZDoKCWl0b2IgLy8gY29udmVydCB0byBieXRlcwoJZXh0cmFjdCA2IDIgLy8gY29udmVydCB0byB1aW50MTYKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglzd2FwCglmcmFtZV9kaWcgLTEgLy8gb2Zmc2V0Cglzd2FwCglyZXBsYWNlMyAvLyB1cGRhdGUgb2Zmc2V0CglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCXJldHN1YgoKcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQ6Cglwcm90byA0IDMKCWZyYW1lX2RpZyAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtNCAvLyB0dXBsZSBoZWFkCglmcmFtZV9kaWcgLTEgLy8gZWxlbWVudAoJZHVwCglsZW4KCWZyYW1lX2RpZyAtMiAvLyBoZWFkIG9mZnNldAoJYnRvaQoJKwoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2J1cnkgLTIgLy8gaGVhZCBvZmZzZXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTMgLy8gdHVwbGUgdGFpbAoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudDoKCXByb3RvIDQgMwoJZnJhbWVfZGlnIC00IC8vIHR1cGxlIGhlYWQKCWZyYW1lX2RpZyAtMSAvLyBlbGVtZW50Cgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB0dXBsZSB0YWlsCglmcmFtZV9kaWcgLTIgLy8gaGVhZCBvZmZzZXQKCXJldHN1YgoKYmFyZV9yb3V0ZV9jcmVhdGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgY3JlYXRlCglpbnQgMQoJcmV0dXJuCgpjcmVhdGU6Cglwcm90byAwIDAKCXJldHN1YgoKYmFyZV9yb3V0ZV9PcHRJbjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBPcHRJbgoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWNhbGxzdWIgb3B0SW4KCWludCAxCglyZXR1cm4KCm9wdEluOgoJcHJvdG8gMCAwCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBzdGF0aWNBcnJheQoJaW50IDEKCXJldHVybgoKc3RhdGljQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjkKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMQoJLy8gcmV0dXJuIGFbMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RhdGljQXJyYXlBcmc6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWNhbGxzdWIgc3RhdGljQXJyYXlBcmcKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5QXJnOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwbiAzCgljYWxsc3ViIG5vbkxpdGVyYWxTdGF0aWNBcnJheUVsZW1lbnRzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NQoJLy8gbjEgPSAxMQoJaW50IDExCglmcmFtZV9idXJ5IC0xIC8vIG4xOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDYKCS8vIG4yID0gMjIKCWludCAyMgoJZnJhbWVfYnVyeSAtMiAvLyBuMjogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ3CgkvLyBuMyA9IDMzCglpbnQgMzMKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFtuMSwgbjIsIG4zXQoJZnJhbWVfZGlnIC0xIC8vIG4xOiB1aW50NjQKCWl0b2IKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbM10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9taXhlZFN0YXRpY0FycmF5RWxlbWVudHM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cG4gMwoJY2FsbHN1YiBtaXhlZFN0YXRpY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCm1peGVkU3RhdGljQXJyYXlFbGVtZW50czoKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NAoJLy8gbjEgPSAzCglpbnQgMwoJZnJhbWVfYnVyeSAtMSAvLyBuMTogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU1CgkvLyBuMiA9IDQKCWludCA0CglmcmFtZV9idXJ5IC0yIC8vIG4yOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTYKCS8vIG4zID0gNQoJaW50IDUKCWZyYW1lX2J1cnkgLTMgLy8gbjM6IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo1NwoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCA5PiA9IFswLCAxLCAyLCBuMSwgbjIsIG4zLCA2LCA3LCA4XQoJaW50IDAKCWl0b2IKCWludCAxCglpdG9iCgljb25jYXQKCWludCAyCglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBuMTogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMiAvLyBuMjogdWludDY0CglpdG9iCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyBuMzogdWludDY0CglpdG9iCgljb25jYXQKCWludCA2CglpdG9iCgljb25jYXQKCWludCA3CglpdG9iCgljb25jYXQKCWludCA4CglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTQgLy8gYTogdWludDY0WzldCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjU5CgkvLyByZXR1cm4gYVsxXSArIGFbNF0gKyBhWzddOwoJZnJhbWVfZGlnIC00IC8vIGE6IHVpbnQ2NFs5XQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWZyYW1lX2RpZyAtNCAvLyBhOiB1aW50NjRbOV0KCWludCA0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCgkrCglmcmFtZV9kaWcgLTQgLy8gYTogdWludDY0WzldCglpbnQgNwoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJKwoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgbm9uTGl0ZXJhbFN0YXRpY0FycmF5QWNjZXNzCglpbnQgMQoJcmV0dXJuCgpub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3M6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NjMKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NAoJLy8gbiA9IDIKCWludCAyCglmcmFtZV9idXJ5IC0yIC8vIG46IHVpbnQ2NAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo2NgoJLy8gcmV0dXJuIGFbbl07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglmcmFtZV9kaWcgLTIgLy8gbjogdWludDY0CglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2V0U3RhdGljQXJyYXlFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzZXRTdGF0aWNBcnJheUVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzAKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo3MgoJLy8gYVsxXSA9IDIyMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMjIyCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NzQKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgc3RhdGljQXJyYXlJblN0b3JhZ2VSZWYKCWludCAxCglyZXR1cm4KCnN0YXRpY0FycmF5SW5TdG9yYWdlUmVmOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjc4CgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODAKCS8vIHRoaXMuZ1JlZi5wdXQoYSkKCWJ5dGUgImdSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MQoJLy8gdGhpcy5sUmVmLnB1dCh0aGlzLnR4bi5zZW5kZXIsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo4MgoJLy8gdGhpcy5iUmVmLnB1dChhKQoJYnl0ZSAiYlJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6ODQKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdSZWYiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiUmVmIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjkwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHVwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmCglpbnQgMQoJcmV0dXJuCgp1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZVJlZjoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo5NAoJLy8gYTogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjk2CgkvLyB0aGlzLmdSZWYucHV0KGEpCglieXRlICJnUmVmIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTcKCS8vIHRoaXMubFJlZi5wdXQodGhpcy50eG4uc2VuZGVyLCBhKQoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6OTgKCS8vIHRoaXMuYlJlZi5wdXQoYSkKCWJ5dGUgImJSZWYiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwMAoJLy8gdGhpcy5nUmVmLmdldCgpWzFdID0gMTExCglieXRlICJnUmVmIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMQoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImdSZWYiCglzd2FwCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMDEKCS8vIHRoaXMubFJlZi5nZXQodGhpcy50eG4uc2VuZGVyKVsxXSA9IDIyMgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyMgoJaXRvYgoJcmVwbGFjZTMKCXR4biBTZW5kZXIKCWJ5dGUgImxSZWYiCgl1bmNvdmVyIDIKCWFwcF9sb2NhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTAyCgkvLyB0aGlzLmJSZWYuZ2V0KClbMV0gPSAzMzMKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMwoJaXRvYgoJcmVwbGFjZTMKCWJ5dGUgImJSZWYiCglzd2FwCglib3hfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEwNAoJLy8gcmV0OiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWwoJYnl0ZSAiZ1JlZiIKCWFwcF9nbG9iYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJdHhuIFNlbmRlcgoJYnl0ZSAibFJlZiIKCWFwcF9sb2NhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWJ5dGUgImJSZWYiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgLTIgLy8gcmV0OiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTEwCgkvLyByZXR1cm4gcmV0OwoJZnJhbWVfZGlnIC0yIC8vIHJldDogdWludDY0WzNdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHN0YXRpY0FycmF5SW5TdG9yYWdlTWFwCglpbnQgMQoJcmV0dXJuCgpzdGF0aWNBcnJheUluU3RvcmFnZU1hcDoKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTQKCS8vIGE6IFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMTYKCS8vIHRoaXMuZ01hcC5wdXQoJ2dNYXAnLCBhKQoJYnl0ZSAiZ01hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWFwcF9nbG9iYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExNwoJLy8gdGhpcy5sTWFwLnB1dCh0aGlzLnR4bi5zZW5kZXIsICdsTWFwJywgYSkKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfbG9jYWxfcHV0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjExOAoJLy8gdGhpcy5iTWFwLnB1dCgnYk1hcCcsIGEpCglieXRlICJiTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMjAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjEyNgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiB1cGRhdGVTdGF0aWNBcnJheUluU3RvcmFnZU1hcAoJaW50IDEKCXJldHVybgoKdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXA6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMwCgkvLyBhOiBTdGF0aWNBcnJheTx1aW50NjQsIDM+ID0gWzExLCAyMiwgMzNdCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTMyCgkvLyB0aGlzLmdNYXAucHV0KCdnTWFwJywgYSkKCWJ5dGUgImdNYXAiCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzMKCS8vIHRoaXMubE1hcC5wdXQodGhpcy50eG4uc2VuZGVyLCAnbE1hcCcsIGEpCgl0eG4gU2VuZGVyCglieXRlICJsTWFwIgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXQoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzQKCS8vIHRoaXMuYk1hcC5wdXQoJ2JNYXAnLCBhKQoJYnl0ZSAiYk1hcCIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbM10KCWJveF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM2CgkvLyB0aGlzLmdNYXAuZ2V0KCdnTWFwJylbMV0gPSAxMTExCglieXRlICJnTWFwIgoJYXBwX2dsb2JhbF9nZXQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDExMTEKCWl0b2IKCXJlcGxhY2UzCglieXRlICJnTWFwIgoJc3dhcAoJYXBwX2dsb2JhbF9wdXQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTM3CgkvLyB0aGlzLmxNYXAuZ2V0KHRoaXMudHhuLnNlbmRlciwgJ2xNYXAnKVsxXSA9IDIyMjIKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMjIyCglpdG9iCglyZXBsYWNlMwoJdHhuIFNlbmRlcgoJYnl0ZSAibE1hcCIKCXVuY292ZXIgMgoJYXBwX2xvY2FsX3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxMzgKCS8vIHRoaXMuYk1hcC5nZXQoJ2JNYXAnKVsxXSA9IDMzMzMKCWJ5dGUgImJNYXAiCglib3hfZ2V0Cglhc3NlcnQKCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDMzMzMKCWl0b2IKCXJlcGxhY2UzCglieXRlICJiTWFwIgoJc3dhcAoJYm94X3B1dAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNDAKCS8vIHJldDogU3RhdGljQXJyYXk8dWludDY0LCAzPiA9IFsKCWJ5dGUgImdNYXAiCglhcHBfZ2xvYmFsX2dldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCXR4biBTZW5kZXIKCWJ5dGUgImxNYXAiCglhcHBfbG9jYWxfZ2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglieXRlICJiTWFwIgoJYm94X2dldAoJYXNzZXJ0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIHJldDogdWludDY0WzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE0NgoJLy8gcmV0dXJuIHJldDsKCWZyYW1lX2RpZyAtMiAvLyByZXQ6IHVpbnQ2NFszXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbmVzdGVkU3RhdGljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgbmVzdGVkU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCm5lc3RlZFN0YXRpY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE1MAoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDY0LCAzPiwgMz4gPSBbWzExLCAyMiwgMzNdLCBbNDQsIDU1LCA2Nl0sIFs3NywgODgsIDk5XV0KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglpbnQgNDQKCWl0b2IKCWludCA1NQoJaXRvYgoJY29uY2F0CglpbnQgNjYKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWludCA4OAoJaXRvYgoJY29uY2F0CglpbnQgOTkKCWl0b2IKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTIKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheUVsZW1lbnQKCWludCAxCglyZXR1cm4KCnVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNTYKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTU4CgkvLyBhWzFdWzFdID0gNTU1CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA1NTUKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFszXVszXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjAKCS8vIHJldHVybiBhWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFszXVszXQoJaW50IDEKCWludCAyNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5CglpbnQgMQoJcmV0dXJuCgp1cGRhdGVOZXN0ZWRTdGF0aWNBcnJheToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjQKCS8vIGE6IFN0YXRpY0FycmF5PFN0YXRpY0FycmF5PHVpbnQ2NCwgMz4sIDM+ID0gW1sxMSwgMjIsIDMzXSwgWzQ0LCA1NSwgNjZdLCBbNzcsIDg4LCA5OV1dCglpbnQgMTEKCWl0b2IKCWludCAyMgoJaXRvYgoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWNvbmNhdAoJaW50IDQ0CglpdG9iCglpbnQgNTUKCWl0b2IKCWNvbmNhdAoJaW50IDY2CglpdG9iCgljb25jYXQKCWNvbmNhdAoJaW50IDc3CglpdG9iCglpbnQgODgKCWl0b2IKCWNvbmNhdAoJaW50IDk5CglpdG9iCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbM11bM10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTY2CgkvLyBhWzFdID0gWzQ0NCwgNTU1LCA2NjZdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgNDQ0CglpdG9iCglpbnQgNTU1CglpdG9iCgljb25jYXQKCWludCA2NjYKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0WzNdWzNdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2OAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0WzNdWzNdCglpbnQgMQoJaW50IDI0IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHRocmVlRGltZW5zaW9uYWxVaW50MTZBcnJheQoJaW50IDEKCXJldHVybgoKdGhyZWVEaW1lbnNpb25hbFVpbnQxNkFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE3MgoJLy8gYTogU3RhdGljQXJyYXk8U3RhdGljQXJyYXk8U3RhdGljQXJyYXk8dWludDE2LCAyPiwgMj4sIDI+ID0gWwoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMzMKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJaW50IDU1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDY2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNzcKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzYKCS8vIGFbMV1bMV0gPSBbNzc3LCA4ODhdCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2WzJdWzJdWzJdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAxCglpbnQgNCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDc3NwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA4ODgKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCXJlcGxhY2UzCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNzgKCS8vIHJldHVybiBhWzFdWzFdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNlsyXVsyXVsyXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMQoJaW50IDQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCAxCglpbnQgMiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NpbXBsZVR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNpbXBsZVR1cGxlCglpbnQgMQoJcmV0dXJuCgpzaW1wbGVUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxODIKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0LCB1aW50MTZdID0gWzExLCAyMiwgMzMsIDQ0XQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAxNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ2NCx1aW50MTYsdWludDY0LHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTg0CgkvLyByZXR1cm4gYVszXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjQsdWludDE2XQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxOAoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2FycmF5SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhcnJheUluVHVwbGUKCWludCAxCglyZXR1cm4KCmFycmF5SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxODgKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgU3RhdGljQXJyYXk8dWludDY0LCAyPiwgdWludDE2XSA9IFsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMWMgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDExCglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAyMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMzCglpdG9iCglpbnQgNDQKCWl0b2IKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNTUKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbMl0sdWludDE2XQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxOTIKCS8vIHJldHVybiBhWzJdWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NFsyXSx1aW50MTZdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEwCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdHVwbGVJbkFycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHR1cGxlSW5BcnJheQoJaW50IDEKCXJldHVybgoKdHVwbGVJbkFycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE5NgoJLy8gYTogU3RhdGljQXJyYXk8W3VpbnQ2NCwgdWludDE2XSwgMj4gPSBbCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMQoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwYSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNl1bMl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjAwCgkvLyByZXR1cm4gYVsxXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNl1bMl0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMQoJaW50IDEwIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgOAoJKwoJaW50IDIKCWV4dHJhY3QzCglieXRlIDB4RkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3R1cGxlSW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB0dXBsZUluVHVwbGUKCWludCAxCglyZXR1cm4KCnR1cGxlSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMDQKCS8vIGE6IFt1aW50MTYsIHVpbnQxNiwgW3VpbnQ2NCwgdWludDE2XSwgW3VpbnQxNiwgdWludDY0XV0gPSBbCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDE4IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAzMwoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCA1NQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDY2CglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50MTYsW3VpbnQ2NCx1aW50MTZdLFt1aW50MTYsdWludDY0XV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjA4CgkvLyByZXR1cm4gYVszXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQxNixbdWludDY0LHVpbnQxNl0sW3VpbnQxNix1aW50NjRdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxNAoJaW50IDIKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc2hvcnRUeXBlTm90YXRpb246Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2hvcnRUeXBlTm90YXRpb24KCWludCAxCglyZXR1cm4KCnNob3J0VHlwZU5vdGF0aW9uOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIxMgoJLy8gYTogW3VpbnQxNjwyPiwgdWludDY0PDI+LCB1aW50MTY8Mj5dID0gWwoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAxOCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMjIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMzCglpdG9iCglpbnQgNDQKCWl0b2IKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNTUKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNjYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0WzJdLHVpbnQxNlsyXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjE2CgkvLyByZXR1cm4gYVsyXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2WzJdLHVpbnQ2NFsyXSx1aW50MTZbMl1dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIwCglpbnQgMQoJaW50IDIgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCSsKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9kaXNndXN0aW5nOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGRpc2d1c3RpbmcKCWludCAxCglyZXR1cm4KCmRpc2d1c3Rpbmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjIwCgkvLyBhOiBTdGF0aWNBcnJheTxbdWludDE2PDI+LCB1aW50NjQsIFt1aW50MTYsIHVpbnQ2NF0sIFN0YXRpY0FycmF5PHVpbnQ2NDwyPiwgMj5dLCAyPiA9IFsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMzYgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDExCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAzMwoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDBhIC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCA0NAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDU1CglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNjYKCWl0b2IKCWludCA3NwoJaXRvYgoJY29uY2F0CglpbnQgODgKCWl0b2IKCWludCA5OQoJaXRvYgoJY29uY2F0Cgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDM2IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMTEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMjIyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAzMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwYSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgNDQ0CglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNTU1CglpdG9iCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNjY2CglpdG9iCglpbnQgNzc3CglpdG9iCgljb25jYXQKCWludCA4ODgKCWl0b2IKCWludCA5OTkKCWl0b2IKCWNvbmNhdAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjIyNQoJLy8gYVsxXVszXVsxXSA9IFs4ODg4LCA5OTk5XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbMl0sdWludDY0LFt1aW50MTYsdWludDY0XSx1aW50NjRbMl1bMl1dWzJdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDEKCWludCA1NCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIyCgkrCglpbnQgMQoJaW50IDE2IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgODg4OAoJaXRvYgoJaW50IDk5OTkKCWl0b2IKCWNvbmNhdAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNlsyXSx1aW50NjQsW3VpbnQxNix1aW50NjRdLHVpbnQ2NFsyXVsyXV1bMl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjI2CgkvLyByZXR1cm4gYVsxXVszXVsxXVswXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2WzJdLHVpbnQ2NCxbdWludDE2LHVpbnQ2NF0sdWludDY0WzJdWzJdXVsyXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgNTQgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyMgoJKwoJaW50IDEKCWludCAxNiAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJKwoJaW50IDAKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CgkrCglpbnQgOAoJZXh0cmFjdDMKCWJ0b2kKCWl0b2IKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVyblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHJldHVyblR1cGxlCglpbnQgMQoJcmV0dXJuCgpyZXR1cm5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyMzAKCS8vIGE6IFt1aW50NjQsIHVpbnQxNiwgdWludDY0XSA9IFsxMSwgMjIsIDMzXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAxMiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMzMKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50NjQsdWludDE2LHVpbnQ2NF0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjMxCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV90dXBsZUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiB0dXBsZUFyZwoJaW50IDEKCXJldHVybgoKdHVwbGVBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjM1CgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDgKCWludCAyCglleHRyYWN0MwoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9keW5hbWljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgZHluYW1pY0FycmF5CglpbnQgMQoJcmV0dXJuCgpkeW5hbWljQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjM5CgkvLyBhOiB1aW50NjRbXSA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjQxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDEKCWludCA4IC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuRHluYW1pY0FycmF5OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHJldHVybkR5bmFtaWNBcnJheQoJaW50IDEKCXJldHVybgoKcmV0dXJuRHluYW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI0NQoJLy8gYTogdWludDY0W10gPSBbMTEsIDIyLCAzM10KCWludCAxMQoJaXRvYgoJaW50IDIyCglpdG9iCgljb25jYXQKCWludCAzMwoJaXRvYgoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQ2NFtdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI0NgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBcnJheUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBkeW5hbWljQXJyYXlBcmcKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBcnJheUFyZzoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNTAKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZUR5bmFtaWNBcnJheUVsZW1lbnQKCWludCAxCglyZXR1cm4KCnVwZGF0ZUR5bmFtaWNBcnJheUVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjU0CgkvLyBhOiB1aW50NjRbXSA9IFsxMSwgMjIsIDMzXQoJaW50IDExCglpdG9iCglpbnQgMjIKCWl0b2IKCWNvbmNhdAoJaW50IDMzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjU2CgkvLyBhWzFdID0gMjIyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWludCAxCglpbnQgOCAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglpbnQgMjIyCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNTgKCS8vIHJldHVybiBhWzFdOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMQoJaW50IDggLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDgKCWV4dHJhY3QzCglidG9pCglpdG9iCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9keW5hbWljVHVwbGVBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBkeW5hbWljVHVwbGVBcnJheQoJaW50IDEKCXJldHVybgoKZHluYW1pY1R1cGxlQXJyYXk6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjYyCgkvLyBhOiBbdWludDE2LCB1aW50NjRdW10gPSBbWzExLCAyMl0sIFszMywgNDRdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwYSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAyMgoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMGEgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDMzCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgNDQKCWl0b2IKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50NjRdW10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjY0CgkvLyByZXR1cm4gYVsxXVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ2NF1bXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMTAgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCSsKCWludCA4CglleHRyYWN0MwoJYnRvaQoJaXRvYgoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXk6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkKCWludCAxCglyZXR1cm4KCnJldHVyblR1cGxlV2l0aER5YW1pY0FycmF5OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI2OAoJLy8gYTogW3VpbnQ2NCwgdWludDE2LCB1aW50NjRbXSwgdWludDE2W11dID0gWzEsIDIsIFszLCA0XSwgWzUsIDZdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwZSAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWludCA0CglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCA1CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjcwCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDY0LHVpbnQxNix1aW50NjRbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiByZXR1cm5EeW5hbWljQXJyYXlGcm9tVHVwbGUKCWludCAxCglyZXR1cm4KCnJldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyNzQKCS8vIGE6IFt1aW50OCwgdWludDE2LCB1aW50OFtdLCB1aW50MTZbXSwgdWludDhbXV0gPSBbMSwgMiwgWzMsIDRdLCBbNSwgNl0sIFs3LCA4XV0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDkgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNyAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA0CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA4CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI3NgoJLy8gcmV0dXJuIGFbNF07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDcKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlJblR1cGxlCglpbnQgMQoJcmV0dXJuCgp1cGRhdGVEeW5hbWljQXJyYXlJblR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4MAoJLy8gYTogW3VpbnQ4LCB1aW50MTZbXSwgdWludDhbXSwgdWludDE2W10sIHVpbnQ4W11dID0gWzksIFs4XSwgWzddLCBbNl0sIFs1XV0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDkgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNyAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCA4CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDcKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCA1CglpdG9iCglleHRyYWN0IDcgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSx1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI4MgoJLy8gYVswXSA9IDk5IGFzIHVpbnQ4CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJaW50IDk5CglpdG9iCglleHRyYWN0IDcgMAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjgzCgkvLyBhWzFdID0gWzEwLCAxMV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxMAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDEKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDMKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg0CgkvLyBhWzJdID0gWzEyLCAxM10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAzCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxMwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDMKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg1CgkvLyBhWzNdID0gWzE0LCAxNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA1Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNAoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAxNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDUKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg2CgkvLyBhWzRdID0gWzE2LCAxN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHVpbnQ4W10sdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjg4CgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIG5vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGUKCWludCAxCglyZXR1cm4KCm5vbkxpdGVyYWxEeW5hbWljRWxlbWVudEluVHVwbGU6Cglwcm90byAyIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MjkyCgkvLyBlOiB1aW50MTZbXSA9IFs1LCA2XQoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBlOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoyOTMKCS8vIGE6IFt1aW50OCwgdWludDE2LCB1aW50OFtdLCB1aW50MTZbXSwgdWludDhbXV0gPSBbMSwgMiwgWzMsIDRdLCBlLCBbNywgOF1dCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA5IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxCglpdG9iCglleHRyYWN0IDcgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgNAoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZnJhbWVfZGlnIC0xIC8vIGU6IHVpbnQxNltdCgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCA4CglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjI5NQoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTIgLy8gYTogW3VpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W11dCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVB1c2g6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQdXNoCglpbnQgMQoJcmV0dXJuCgphcnJheVB1c2g6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mjk5CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMDEKCS8vIGEucHVzaCgzIGFzIHVpbnQxNikKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgkrCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJZXh0cmFjdCAyIDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzAzCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYXJyYXlQb3A6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgYXJyYXlQb3AKCWludCAxCglyZXR1cm4KCmFycmF5UG9wOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwNwoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMwOQoJLy8gYS5wb3AoKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTEKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVBvcFZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgYXJyYXlQb3BWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlQb3BWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTUKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTcKCS8vIHYgPSBhLnBvcCgpIQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglkdXAKCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCglleHRyYWN0IDIgMAoJY29uY2F0CglkdXAKCWxlbgoJaW50IDIKCS0KCWludCAwCglzd2FwCglleHRyYWN0MwoJZHVwCglsZW4KCWludCAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWNvdmVyIDIKCWV4dHJhY3QzCglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC0yIC8vIHY6IHVpbnQxNgoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMTkKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNgoJYnl0ZSAweEZGRkYKCWImCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhcnJheVNwbGljZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2U6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzIzCgkvLyBhOiB1aW50NjRbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWludCAyCglpdG9iCgljb25jYXQKCWludCAzCglpdG9iCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDY0W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzI1CgkvLyBhLnNwbGljZSgxLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDEKCWludCA4CgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDgKCSoKCWludCA4CgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50NjRbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDY0W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCA4CgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50NjRbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMjcKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQ2NFtdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9hcnJheVNwbGljZVZhbHVlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXBuIDMKCWNhbGxzdWIgYXJyYXlTcGxpY2VWYWx1ZQoJaW50IDEKCXJldHVybgoKYXJyYXlTcGxpY2VWYWx1ZToKCXByb3RvIDQgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzEKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgOAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAxMAoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMGEKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozMzMKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzM0CgkvLyBsID0gNwoJaW50IDcKCWZyYW1lX2J1cnkgLTMgLy8gbDogdWludDY0CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNQoJLy8gdiA9IGEuc3BsaWNlKGksIGwpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJZnJhbWVfZGlnIC0zIC8vIGw6IHVpbnQ2NAoJLQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gbDogdWludDY0CglpdG9iCglleHRyYWN0IDYgMgoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWludCAyCgktCglleHRyYWN0MwoJY29uY2F0Cglzd2FwCglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCglmcmFtZV9idXJ5IC00IC8vIHY6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjMzNwoJLy8gcmV0dXJuIHY7CglmcmFtZV9kaWcgLTQgLy8gdjogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBcnJheUVsZW1lbnRzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CglkdXAKCWNhbGxzdWIgZHluYW1pY0FycmF5RWxlbWVudHMKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBcnJheUVsZW1lbnRzOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MQoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0MgoJLy8gbmV3QTogdWludDE2W10gPSBbYVswXSwgYVsxXSwgYVsyXV0KCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDAKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMQoJaW50IDIgLy8gZWxlbWVudCBsZW5ndGgKCSogLy8gZWxlbWVudCBvZmZzZXQKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJaW50IDIKCWV4dHJhY3QzCgljb25jYXQKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWludCAyIC8vIGVsZW1lbnQgbGVuZ3RoCgkqIC8vIGVsZW1lbnQgb2Zmc2V0CglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWludCAyCglleHRyYWN0MwoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0yIC8vIG5ld0E6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM0NAoJLy8gcmV0dXJuIG5ld0E7CglmcmFtZV9kaWcgLTIgLy8gbmV3QTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50OgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHNwbGljZUxhc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNDgKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNTAKCS8vIGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1MgoJLy8gcmV0dXJuIGE7CglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3NwbGljZUxhc3RFbGVtZW50VmFsdWU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWR1cAoJY2FsbHN1YiBzcGxpY2VMYXN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VMYXN0RWxlbWVudFZhbHVlOgoJcHJvdG8gMiAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1NgoJLy8gYTogdWludDE2W10gPSBbMSwgMiwgM10KCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMwoJc3dhcAoJY29uY2F0CglmcmFtZV9idXJ5IC0xIC8vIGE6IHVpbnQxNltdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM1OAoJLy8gdiA9IGEuc3BsaWNlKDIsIDEpCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWludCAwCglleHRyYWN0X3VpbnQxNgoJaW50IDEKCS0KCWl0b2IKCWV4dHJhY3QgNiAyCglpbnQgMgoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMiAvLyBzcGxpY2Ugc3RhcnQKCWludCAxCglpbnQgMgoJKgoJaW50IDIKCSsKCXN0b3JlIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMgoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCXN1YnN0cmluZzMKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJZHVwCglsZW4KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJKwoJaW50IDIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJY29uY2F0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDIKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJbG9hZCAxMiAvLyBzcGxpY2Ugc3RhcnQKCWxvYWQgMTMgLy8gc3BsaWNlIGJ5dGUgbGVuZ3RoCglpbnQgMgoJLQoJZXh0cmFjdDMKCWNvbmNhdAoJc3dhcAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoJZnJhbWVfYnVyeSAtMiAvLyB2OiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjAKCS8vIHJldHVybiB2OwoJZnJhbWVfZGlnIC0yIC8vIHY6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnQ6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3BsaWNlRmlyc3RFbGVtZW50CglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnQ6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY0CgkvLyBhOiB1aW50MTZbXSA9IFsxLCAyLCAzXQoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MzY2CgkvLyBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNjgKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJZHVwCgljYWxsc3ViIHNwbGljZUZpcnN0RWxlbWVudFZhbHVlCglpbnQgMQoJcmV0dXJuCgpzcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzIKCS8vIGE6IHVpbnQxNltdID0gWzEsIDIsIDNdCglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDMKCXN3YXAKCWNvbmNhdAoJZnJhbWVfYnVyeSAtMSAvLyBhOiB1aW50MTZbXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozNzQKCS8vIHYgPSBhLnNwbGljZSgwLCAxKQoJZnJhbWVfZGlnIC0xIC8vIGE6IHVpbnQxNltdCglpbnQgMAoJZXh0cmFjdF91aW50MTYKCWludCAxCgktCglpdG9iCglleHRyYWN0IDYgMgoJaW50IDAKCWludCAyCgkqCglpbnQgMgoJKwoJc3RvcmUgMTIgLy8gc3BsaWNlIHN0YXJ0CglpbnQgMQoJaW50IDIKCSoKCWludCAyCgkrCglzdG9yZSAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCWZyYW1lX2RpZyAtMSAvLyBhOiB1aW50MTZbXQoJaW50IDIKCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0CglzdWJzdHJpbmczCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWR1cAoJbGVuCglsb2FkIDEyIC8vIHNwbGljZSBzdGFydAoJbG9hZCAxMyAvLyBzcGxpY2UgYnl0ZSBsZW5ndGgKCSsKCWludCAyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWNvbmNhdAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAyCglmcmFtZV9kaWcgLTEgLy8gYTogdWludDE2W10KCWxvYWQgMTIgLy8gc3BsaWNlIHN0YXJ0Cglsb2FkIDEzIC8vIHNwbGljZSBieXRlIGxlbmd0aAoJaW50IDIKCS0KCWV4dHJhY3QzCgljb25jYXQKCXN3YXAKCWZyYW1lX2J1cnkgLTEgLy8gYTogdWludDE2W10KCWZyYW1lX2J1cnkgLTIgLy8gdjogdWludDE2W10KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzc2CgkvLyByZXR1cm4gdjsKCWZyYW1lX2RpZyAtMiAvLyB2OiB1aW50MTZbXQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfc3RyaW5nUmV0dXJuOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CgljYWxsc3ViIHN0cmluZ1JldHVybgoJaW50IDEKCXJldHVybgoKc3RyaW5nUmV0dXJuOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjM4MAoJLy8gcmV0dXJuICdIZWxsbyBXb3JsZCEnOwoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0FyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZXh0cmFjdCAyIDAKCWNhbGxzdWIgc3RyaW5nQXJnCglpbnQgMQoJcmV0dXJuCgpzdHJpbmdBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzg0CgkvLyBhc3NlcnQocyA9PT0gJ0hlbGxvIFdvcmxkIScpCglmcmFtZV9kaWcgLTEgLy8gczogYnl0ZXMKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCT09Cglhc3NlcnQKCXJldHN1YgoKYWJpX3JvdXRlX3N0cmluZ0luVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc3RyaW5nSW5UdXBsZQoJaW50IDEKCXJldHVybgoKc3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozODgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHN0cmluZywgdWludDhbXV0gPSBbMSwgWzJdLCAnSGVsbG8gV29ybGQhJywgWzNdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwOCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHN0cmluZyx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2FjY2VzU3RyaW5nSW5UdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiBhY2Nlc1N0cmluZ0luVHVwbGUKCWludCAxCglyZXR1cm4KCmFjY2VzU3RyaW5nSW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTQKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHN0cmluZywgdWludDhbXV0gPSBbMSwgWzJdLCAnSGVsbG8gV29ybGQhJywgWzNdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwOCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHN0cmluZyx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czozOTYKCS8vIGFzc2VydChhWzJdID09PSAnSGVsbG8gV29ybGQhJykKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDQKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCT09Cglhc3NlcnQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6Mzk4CgkvLyByZXR1cm4gYVsyXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sc3RyaW5nLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDQKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV91cGRhdGVTdHJpbmdJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIHVwZGF0ZVN0cmluZ0luVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZVN0cmluZ0luVHVwbGU6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDAyCgkvLyBhOiBbdWludDgsIHVpbnQxNltdLCBzdHJpbmcsIHVpbnQxNltdLCB1aW50OFtdXSA9IFs5LCBbOF0sICdIaT8nLCBbNl0sIFs1XV0KCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDkgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDkKCWl0b2IKCWV4dHJhY3QgNyAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWludCA4CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJYnl0ZSAiSGk/IgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCA2CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDQKCS8vIGFbMF0gPSA5OSBhcyB1aW50OAoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMAoJaW50IDk5CglpdG9iCglleHRyYWN0IDcgMAoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MDUKCS8vIGFbMV0gPSBbMTAsIDExXQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMQoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgMTAKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgMTEKCWl0b2IKCWV4dHJhY3QgNiAwCgljb25jYXQKCWJ5dGUgMHgwMDAyCglzd2FwCgljb25jYXQKCWludCAxCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA2CgkvLyBhWzJdID0gJ0hlbGxvIFdvcmxkIScKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDMKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJYnl0ZSAiSGVsbG8gV29ybGQhIgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWludCAzCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA1CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA3CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDA3CgkvLyBhWzNdID0gWzE0LCAxNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDUKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDE0CglpdG9iCglleHRyYWN0IDYgMAoJaW50IDE1CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CglpbnQgNQoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNwoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQwOAoJLy8gYVs0XSA9IFsxNiwgMTddCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA3Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCAxNgoJaXRvYgoJZXh0cmFjdCA3IDAKCWludCAxNwoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDcKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQ4LHVpbnQxNltdLHN0cmluZyx1aW50MTZbXSx1aW50OFtdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50OCx1aW50MTZbXSxzdHJpbmcsdWludDE2W10sdWludDhbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZVR1cGxlV2l0aE9ubHlEeW5hbWljVHlwZXM6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcwoJaW50IDEKCXJldHVybgoKdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTQKCS8vIGE6IFt1aW50MTZbXSwgdWludDE2W10sIHVpbnQxNltdXSA9IFtbMV0sIFsyXSwgWzNdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJY2FsbHN1YiBwcm9jZXNzX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJaW50IDMKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTYKCS8vIGFbMF0gPSBbNCwgNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDQKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDAKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTcKCS8vIGFbMV0gPSBbNiwgN10KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDYKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgNwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJZHVwIC8vIGR1cCBsZW5ndGggZGlmZmVyZW5jZQoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfaGVhZAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MTgKCS8vIGFbMl0gPSBbOCwgOV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDQKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDgKCWl0b2IKCWV4dHJhY3QgNiAwCglpbnQgOQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3Nob3J0ZW5EeW5hbWljRWxlbWVudEluVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgc2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZQoJaW50IDEKCXJldHVybgoKc2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjQKCS8vIGE6IFt1aW50MTZbXSwgdWludDE2W10sIHVpbnQxNltdXSA9IFtbMSwgMl0sIFsyLCAzXSwgWzMsIDRdXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAyCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWludCA0CglpdG9iCglleHRyYWN0IDYgMAoJY29uY2F0CglieXRlIDB4MDAwMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MjYKCS8vIGFbMF0gPSBbNV0KCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDAKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDIKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDUKCWl0b2IKCWV4dHJhY3QgNiAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CglpbnQgMAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY190dXBsZV9lbGVtZW50CglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgMgoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglkdXAgLy8gZHVwIGxlbmd0aCBkaWZmZXJlbmNlCglpbnQgNAoJY2FsbHN1YiB1cGRhdGVfZHluYW1pY19oZWFkCglwb3AgLy8gcG9wIGxlbmd0aCBkaWZmZXJlbmNlCglsb2FkIDMgLy8gZnVsbCB0dXBsZQoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2W10sdWludDE2W10sdWludDE2W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQyNwoJLy8gYVsxXSA9IFs2XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMgoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglpbnQgNgoJaXRvYgoJZXh0cmFjdCA2IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWludCAyCgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX3R1cGxlX2VsZW1lbnQKCWR1cCAvLyBkdXAgbGVuZ3RoIGRpZmZlcmVuY2UKCWludCA0CgljYWxsc3ViIHVwZGF0ZV9keW5hbWljX2hlYWQKCXBvcCAvLyBwb3AgbGVuZ3RoIGRpZmZlcmVuY2UKCWxvYWQgMyAvLyBmdWxsIHR1cGxlCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDI4CgkvLyBhWzJdID0gWzddCglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCA0Cglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAyCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWxlbiAvLyBsZW5ndGggb2Ygb2xkIGVsZW1lbnQKCWludCA3CglpdG9iCglleHRyYWN0IDYgMAoJYnl0ZSAweDAwMDEKCXN3YXAKCWNvbmNhdAoJaW50IDQKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNltdLHVpbnQxNltdLHVpbnQxNltdXQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MzAKCS8vIHJldHVybiBhOwoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTZbXSx1aW50MTZbXSx1aW50MTZbXV0KCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX25hbWVkVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgbmFtZWRUdXBsZQoJaW50IDEKCXJldHVybgoKbmFtZWRUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0MzQKCS8vIGE6IHsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWJ5dGUgIkhlbGxvIFdvcmxkISIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDQyCgkvLyByZXR1cm4gYS5iYXI7CglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZU5hbWVkVHVwbGU6Cgl0eG4gT25Db21wbGV0aW9uCglpbnQgTm9PcAoJPT0KCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJIT0KCSYmCglhc3NlcnQKCWJ5dGUgMHgKCWNhbGxzdWIgdXBkYXRlTmFtZWRUdXBsZQoJaW50IDEKCXJldHVybgoKdXBkYXRlTmFtZWRUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NDYKCS8vIGE6IHsKCWJ5dGUgMHggLy8gaW5pdGlhbCBoZWFkCglieXRlIDB4IC8vIGluaXRpYWwgdGFpbAoJYnl0ZSAweDAwMDQgLy8gaW5pdGlhbCBoZWFkIG9mZnNldAoJaW50IDEKCWl0b2IKCWV4dHJhY3QgNiAwCgljYWxsc3ViIHByb2Nlc3Nfc3RhdGljX3R1cGxlX2VsZW1lbnQKCWJ5dGUgIkhpPyIKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDU0CgkvLyBhLmJhciA9ICdIZWxsbyBXb3JsZCEnCglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDU2CgkvLyByZXR1cm4gYS5iYXI7CglmcmFtZV9kaWcgLTEgLy8gYTogeyBmb286IHVpbnQxNiwgYmFyOiBzdHJpbmcsIH0KCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2N1c3RvbVR5cGVzOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGN1c3RvbVR5cGVzCglpbnQgMQoJcmV0dXJuCgpjdXN0b21UeXBlczoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NjAKCS8vIGFhOiBDdXN0b21UeXBlID0gewoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNCAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJYnl0ZSAiSGk/IgoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhYTogQ3VzdG9tVHlwZQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NjUKCS8vIGFhLmJhciA9ICdIZWxsbyBXb3JsZCEnCglmcmFtZV9kaWcgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCWR1cAoJc3RvcmUgMyAvLyBmdWxsIHR1cGxlCglpbnQgMgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglsZW4gLy8gbGVuZ3RoIG9mIG9sZCBlbGVtZW50CglieXRlICJIZWxsbyBXb3JsZCEiCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYWE6IEN1c3RvbVR5cGUKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDY3CgkvLyByZXR1cm4gYWEuYmFyOwoJZnJhbWVfZGlnIC0xIC8vIGFhOiBDdXN0b21UeXBlCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJZXh0cmFjdCAyIDAKCWR1cAoJbGVuCglpdG9iCglleHRyYWN0IDYgMgoJc3dhcAoJY29uY2F0CglieXRlIDB4MTUxZjdjNzUKCXN3YXAKCWNvbmNhdAoJbG9nCglyZXRzdWIKCmFiaV9yb3V0ZV9zdGF0aWNTdHJpbmdBcnJheUFyZzoKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBzdGF0aWNTdHJpbmdBcnJheUFyZwoJaW50IDEKCXJldHVybgoKc3RhdGljU3RyaW5nQXJyYXlBcmc6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDcxCgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAxCglpbnQgMgoJKgoJc3dhcAoJZHVwbiAyCgl1bmNvdmVyIDMKCWludCAyCglleHRyYWN0MwoJYnRvaSAvLyBzdGFydCBvZiBkeW5hbWljIGFycmF5CglkdXAKCWNvdmVyIDIgLy8gZHVwbGljYXRlIHN0YXJ0IGZvciBsYXRlcgoJaW50IDIKCWV4dHJhY3QzIC8vIGV4dHJhY3QgbGVuZ3RoIG9mIGFycmF5CglidG9pCglpbnQgMQoJKiAvLyBnZXQgYXJyYXkgbGVuZ3RoCglpbnQgMgoJKyAvLyBhZGQgdHdvIGZvciBsZW5ndGgKCWV4dHJhY3QzCglleHRyYWN0IDIgMAoJZHVwCglsZW4KCWl0b2IKCWV4dHJhY3QgNiAyCglzd2FwCgljb25jYXQKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2R5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJY2FsbHN1YiBkeW5hbWljQWNjZXNzT2ZEeW5hbWljRWxlbWVudEluU3RhdGljQXJyYXkKCWludCAxCglyZXR1cm4KCmR5bmFtaWNBY2Nlc3NPZkR5bmFtaWNFbGVtZW50SW5TdGF0aWNBcnJheToKCXByb3RvIDIgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0NzUKCS8vIGkgPSAxCglpbnQgMQoJZnJhbWVfYnVyeSAtMiAvLyBpOiB1aW50NjQKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDc2CgkvLyByZXR1cm4gYVtpXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBieXRlc1szXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2RpZyAtMiAvLyBpOiB1aW50NjQKCWludCAyCgkqCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWV4dHJhY3QgMiAwCglkdXAKCWxlbgoJaXRvYgoJZXh0cmFjdCA2IDIKCXN3YXAKCWNvbmNhdAoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQoJaW50IDEKCXJldHVybgoKZHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4MAoJLy8gYTogW3VpbnQxNiwgdWludDhbXSwgdWludDE2XSA9IFsxLCBbMl0sIDNdCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA2IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDgyCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgphYmlfcm91dGVfYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGFjY2Vzc0R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZQoJaW50IDEKCXJldHVybgoKYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ4NgoJLy8gYTogW3VpbnQxNiwgdWludDhbXSwgdWludDE2XSA9IFsxLCBbMl0sIDNdCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA2IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50CglpbnQgMgoJaXRvYgoJZXh0cmFjdCA3IDAKCWJ5dGUgMHgwMDAxCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCWludCAzCglpdG9iCglleHRyYWN0IDYgMAoJY2FsbHN1YiBwcm9jZXNzX3N0YXRpY190dXBsZV9lbGVtZW50Cglwb3AgLy8gcG9wIGhlYWQgb2Zmc2V0Cgljb25jYXQgLy8gY29uY2F0IGhlYWQgYW5kIHRhaWwKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NDg4CgkvLyByZXR1cm4gYVsxXTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWR1cAoJY292ZXIgMiAvLyBkdXBsaWNhdGUgc3RhcnQgZm9yIGxhdGVyCglpbnQgMgoJZXh0cmFjdDMgLy8gZXh0cmFjdCBsZW5ndGggb2YgYXJyYXkKCWJ0b2kKCWludCAxCgkqIC8vIGdldCBhcnJheSBsZW5ndGgKCWludCAyCgkrIC8vIGFkZCB0d28gZm9yIGxlbmd0aAoJZXh0cmFjdDMKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX2FjY2Vzc0R5bmFtaWNBcnJheUVsZW1lbnRJblR1cGxlOgoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE5vT3AKCT09Cgl0eG4gQXBwbGljYXRpb25JRAoJaW50IDAKCSE9CgkmJgoJYXNzZXJ0CglieXRlIDB4CgljYWxsc3ViIGFjY2Vzc0R5bmFtaWNBcnJheUVsZW1lbnRJblR1cGxlCglpbnQgMQoJcmV0dXJuCgphY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OTIKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W11dID0gWzExLCBbMjIsIDMzLCA0NF1dCglieXRlIDB4IC8vIGluaXRpYWwgaGVhZAoJYnl0ZSAweCAvLyBpbml0aWFsIHRhaWwKCWJ5dGUgMHgwMDA0IC8vIGluaXRpYWwgaGVhZCBvZmZzZXQKCWludCAxMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIyCglpdG9iCglleHRyYWN0IDcgMAoJaW50IDMzCglpdG9iCglleHRyYWN0IDcgMAoJY29uY2F0CglpbnQgNDQKCWl0b2IKCWV4dHJhY3QgNyAwCgljb25jYXQKCWJ5dGUgMHgwMDAzCglzd2FwCgljb25jYXQKCWNhbGxzdWIgcHJvY2Vzc19keW5hbWljX3R1cGxlX2VsZW1lbnQKCXBvcCAvLyBwb3AgaGVhZCBvZmZzZXQKCWNvbmNhdCAvLyBjb25jYXQgaGVhZCBhbmQgdGFpbAoJZnJhbWVfYnVyeSAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W11dCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjQ5NAoJLy8gcmV0dXJuIGFbMV1bMV07CglmcmFtZV9kaWcgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdXQoJZHVwCglzdG9yZSAzIC8vIGZ1bGwgdHVwbGUKCWludCAyCglzd2FwCglkdXBuIDIKCXVuY292ZXIgMwoJaW50IDIKCWV4dHJhY3QzCglidG9pIC8vIHN0YXJ0IG9mIGR5bmFtaWMgYXJyYXkKCWludCAxCglpbnQgMSAvLyBlbGVtZW50IGxlbmd0aAoJKiAvLyBlbGVtZW50IG9mZnNldAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCgkrCglpbnQgMQoJZXh0cmFjdDMKCWJ5dGUgMHhGRkZGRkZGRgoJYiYKCWJ5dGUgMHgxNTFmN2M3NQoJc3dhcAoJY29uY2F0Cglsb2cKCXJldHN1YgoKYWJpX3JvdXRlX3VwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXR4biBPbkNvbXBsZXRpb24KCWludCBOb09wCgk9PQoJdHhuIEFwcGxpY2F0aW9uSUQKCWludCAwCgkhPQoJJiYKCWFzc2VydAoJYnl0ZSAweAoJY2FsbHN1YiB1cGRhdGVEeW5hbWljQXJyYXlJbk1pZGRsZU9mVHVwbGUKCWludCAxCglyZXR1cm4KCnVwZGF0ZUR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZToKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czo0OTgKCS8vIGE6IFt1aW50MTYsIHVpbnQ4W10sIHVpbnQxNl0gPSBbMSwgWzJdLCAzXQoJYnl0ZSAweCAvLyBpbml0aWFsIGhlYWQKCWJ5dGUgMHggLy8gaW5pdGlhbCB0YWlsCglieXRlIDB4MDAwNiAvLyBpbml0aWFsIGhlYWQgb2Zmc2V0CglpbnQgMQoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJaW50IDIKCWl0b2IKCWV4dHJhY3QgNyAwCglieXRlIDB4MDAwMQoJc3dhcAoJY29uY2F0CgljYWxsc3ViIHByb2Nlc3NfZHluYW1pY190dXBsZV9lbGVtZW50CglpbnQgMwoJaXRvYgoJZXh0cmFjdCA2IDAKCWNhbGxzdWIgcHJvY2Vzc19zdGF0aWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBoZWFkIG9mZnNldAoJY29uY2F0IC8vIGNvbmNhdCBoZWFkIGFuZCB0YWlsCglmcmFtZV9idXJ5IC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjUwMAoJLy8gYVsxXSA9IFs0LCA1XQoJZnJhbWVfZGlnIC0xIC8vIGE6IFt1aW50MTYsdWludDhbXSx1aW50MTZdCglkdXAKCXN0b3JlIDMgLy8gZnVsbCB0dXBsZQoJaW50IDIKCXN3YXAKCWR1cG4gMgoJdW5jb3ZlciAzCglpbnQgMgoJZXh0cmFjdDMKCWJ0b2kgLy8gc3RhcnQgb2YgZHluYW1pYyBhcnJheQoJZHVwCgljb3ZlciAyIC8vIGR1cGxpY2F0ZSBzdGFydCBmb3IgbGF0ZXIKCWludCAyCglleHRyYWN0MyAvLyBleHRyYWN0IGxlbmd0aCBvZiBhcnJheQoJYnRvaQoJaW50IDEKCSogLy8gZ2V0IGFycmF5IGxlbmd0aAoJaW50IDIKCSsgLy8gYWRkIHR3byBmb3IgbGVuZ3RoCglleHRyYWN0MwoJbGVuIC8vIGxlbmd0aCBvZiBvbGQgZWxlbWVudAoJaW50IDQKCWl0b2IKCWV4dHJhY3QgNyAwCglpbnQgNQoJaXRvYgoJZXh0cmFjdCA3IDAKCWNvbmNhdAoJYnl0ZSAweDAwMDIKCXN3YXAKCWNvbmNhdAoJaW50IDIKCWNhbGxzdWIgdXBkYXRlX2R5bmFtaWNfdHVwbGVfZWxlbWVudAoJcG9wIC8vIHBvcCBsZW5ndGggZGlmZmVyZW5jZQoJbG9hZCAzIC8vIGZ1bGwgdHVwbGUKCWZyYW1lX2J1cnkgLTEgLy8gYTogW3VpbnQxNix1aW50OFtdLHVpbnQxNl0KCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6NTAyCgkvLyByZXR1cm4gYTsKCWZyYW1lX2RpZyAtMSAvLyBhOiBbdWludDE2LHVpbnQ4W10sdWludDE2XQoJYnl0ZSAweDE1MWY3Yzc1Cglzd2FwCgljb25jYXQKCWxvZwoJcmV0c3ViCgptYWluOgoJdHhuIE51bUFwcEFyZ3MKCWJueiByb3V0ZV9hYmkKCXR4biBBcHBsaWNhdGlvbklECglpbnQgMAoJPT0KCWJueiBiYXJlX3JvdXRlX2NyZWF0ZQoJdHhuIE9uQ29tcGxldGlvbgoJaW50IE9wdEluCgk9PQoJaW50IDEKCW1hdGNoIGJhcmVfcm91dGVfT3B0SW4KCnJvdXRlX2FiaToKCW1ldGhvZCAic3RhdGljQXJyYXkoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuU3RhdGljQXJyYXkoKXVpbnQ2NFszXSIKCW1ldGhvZCAic3RhdGljQXJyYXlBcmcodWludDY0WzNdKXVpbnQ2NCIKCW1ldGhvZCAibm9uTGl0ZXJhbFN0YXRpY0FycmF5RWxlbWVudHMoKXVpbnQ2NCIKCW1ldGhvZCAibWl4ZWRTdGF0aWNBcnJheUVsZW1lbnRzKCl1aW50NjQiCgltZXRob2QgIm5vbkxpdGVyYWxTdGF0aWNBcnJheUFjY2VzcygpdWludDY0IgoJbWV0aG9kICJzZXRTdGF0aWNBcnJheUVsZW1lbnQoKXVpbnQ2NCIKCW1ldGhvZCAic3RhdGljQXJyYXlJblN0b3JhZ2VSZWYoKXVpbnQ2NFszXSIKCW1ldGhvZCAidXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VSZWYoKXVpbnQ2NFszXSIKCW1ldGhvZCAic3RhdGljQXJyYXlJblN0b3JhZ2VNYXAoKXVpbnQ2NFszXSIKCW1ldGhvZCAidXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXAoKXVpbnQ2NFszXSIKCW1ldGhvZCAibmVzdGVkU3RhdGljQXJyYXkoKXVpbnQ2NCIKCW1ldGhvZCAidXBkYXRlTmVzdGVkU3RhdGljQXJyYXlFbGVtZW50KCl1aW50NjQiCgltZXRob2QgInVwZGF0ZU5lc3RlZFN0YXRpY0FycmF5KCl1aW50NjQiCgltZXRob2QgInRocmVlRGltZW5zaW9uYWxVaW50MTZBcnJheSgpdWludDE2IgoJbWV0aG9kICJzaW1wbGVUdXBsZSgpdWludDE2IgoJbWV0aG9kICJhcnJheUluVHVwbGUoKXVpbnQ2NCIKCW1ldGhvZCAidHVwbGVJbkFycmF5KCl1aW50MTYiCgltZXRob2QgInR1cGxlSW5UdXBsZSgpdWludDY0IgoJbWV0aG9kICJzaG9ydFR5cGVOb3RhdGlvbigpdWludDE2IgoJbWV0aG9kICJkaXNndXN0aW5nKCl1aW50NjQiCgltZXRob2QgInJldHVyblR1cGxlKCkodWludDY0LHVpbnQxNix1aW50NjQpIgoJbWV0aG9kICJ0dXBsZUFyZygodWludDY0LHVpbnQxNix1aW50NjQpKXVpbnQxNiIKCW1ldGhvZCAiZHluYW1pY0FycmF5KCl1aW50NjQiCgltZXRob2QgInJldHVybkR5bmFtaWNBcnJheSgpdWludDY0W10iCgltZXRob2QgImR5bmFtaWNBcnJheUFyZyh1aW50NjRbXSl1aW50NjQiCgltZXRob2QgInVwZGF0ZUR5bmFtaWNBcnJheUVsZW1lbnQoKXVpbnQ2NCIKCW1ldGhvZCAiZHluYW1pY1R1cGxlQXJyYXkoKXVpbnQ2NCIKCW1ldGhvZCAicmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkoKSh1aW50NjQsdWludDE2LHVpbnQ2NFtdLHVpbnQxNltdKSIKCW1ldGhvZCAicmV0dXJuRHluYW1pY0FycmF5RnJvbVR1cGxlKCl1aW50OFtdIgoJbWV0aG9kICJ1cGRhdGVEeW5hbWljQXJyYXlJblR1cGxlKCkodWludDgsdWludDE2W10sdWludDhbXSx1aW50MTZbXSx1aW50OFtdKSIKCW1ldGhvZCAibm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZSgpKHVpbnQ4LHVpbnQxNix1aW50OFtdLHVpbnQxNltdLHVpbnQ4W10pIgoJbWV0aG9kICJhcnJheVB1c2goKXVpbnQxNltdIgoJbWV0aG9kICJhcnJheVBvcCgpdWludDE2W10iCgltZXRob2QgImFycmF5UG9wVmFsdWUoKXVpbnQxNiIKCW1ldGhvZCAiYXJyYXlTcGxpY2UoKXVpbnQ2NFtdIgoJbWV0aG9kICJhcnJheVNwbGljZVZhbHVlKCl1aW50MTZbXSIKCW1ldGhvZCAiZHluYW1pY0FycmF5RWxlbWVudHMoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VMYXN0RWxlbWVudCgpdWludDE2W10iCgltZXRob2QgInNwbGljZUxhc3RFbGVtZW50VmFsdWUoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VGaXJzdEVsZW1lbnQoKXVpbnQxNltdIgoJbWV0aG9kICJzcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZSgpdWludDE2W10iCgltZXRob2QgInN0cmluZ1JldHVybigpc3RyaW5nIgoJbWV0aG9kICJzdHJpbmdBcmcoc3RyaW5nKXZvaWQiCgltZXRob2QgInN0cmluZ0luVHVwbGUoKSh1aW50MTYsdWludDhbXSxzdHJpbmcsdWludDhbXSkiCgltZXRob2QgImFjY2VzU3RyaW5nSW5UdXBsZSgpc3RyaW5nIgoJbWV0aG9kICJ1cGRhdGVTdHJpbmdJblR1cGxlKCkodWludDgsdWludDE2W10sc3RyaW5nLHVpbnQxNltdLHVpbnQ4W10pIgoJbWV0aG9kICJ1cGRhdGVUdXBsZVdpdGhPbmx5RHluYW1pY1R5cGVzKCkodWludDE2W10sdWludDE2W10sdWludDE2W10pIgoJbWV0aG9kICJzaG9ydGVuRHluYW1pY0VsZW1lbnRJblR1cGxlKCkodWludDE2W10sdWludDE2W10sdWludDE2W10pIgoJbWV0aG9kICJuYW1lZFR1cGxlKClzdHJpbmciCgltZXRob2QgInVwZGF0ZU5hbWVkVHVwbGUoKXN0cmluZyIKCW1ldGhvZCAiY3VzdG9tVHlwZXMoKXN0cmluZyIKCW1ldGhvZCAic3RhdGljU3RyaW5nQXJyYXlBcmcoc3RyaW5nWzNdKXN0cmluZyIKCW1ldGhvZCAiZHluYW1pY0FjY2Vzc09mRHluYW1pY0VsZW1lbnRJblN0YXRpY0FycmF5KHN0cmluZ1szXSlzdHJpbmciCgltZXRob2QgImR5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSgpKHVpbnQxNix1aW50OFtdLHVpbnQxNikiCgltZXRob2QgImFjY2Vzc0R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSgpdWludDhbXSIKCW1ldGhvZCAiYWNjZXNzRHluYW1pY0FycmF5RWxlbWVudEluVHVwbGUoKXVpbnQzMiIKCW1ldGhvZCAidXBkYXRlRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlKCkodWludDE2LHVpbnQ4W10sdWludDE2KSIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoIGFiaV9yb3V0ZV9zdGF0aWNBcnJheSBhYmlfcm91dGVfcmV0dXJuU3RhdGljQXJyYXkgYWJpX3JvdXRlX3N0YXRpY0FycmF5QXJnIGFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlFbGVtZW50cyBhYmlfcm91dGVfbWl4ZWRTdGF0aWNBcnJheUVsZW1lbnRzIGFiaV9yb3V0ZV9ub25MaXRlcmFsU3RhdGljQXJyYXlBY2Nlc3MgYWJpX3JvdXRlX3NldFN0YXRpY0FycmF5RWxlbWVudCBhYmlfcm91dGVfc3RhdGljQXJyYXlJblN0b3JhZ2VSZWYgYWJpX3JvdXRlX3VwZGF0ZVN0YXRpY0FycmF5SW5TdG9yYWdlUmVmIGFiaV9yb3V0ZV9zdGF0aWNBcnJheUluU3RvcmFnZU1hcCBhYmlfcm91dGVfdXBkYXRlU3RhdGljQXJyYXlJblN0b3JhZ2VNYXAgYWJpX3JvdXRlX25lc3RlZFN0YXRpY0FycmF5IGFiaV9yb3V0ZV91cGRhdGVOZXN0ZWRTdGF0aWNBcnJheUVsZW1lbnQgYWJpX3JvdXRlX3VwZGF0ZU5lc3RlZFN0YXRpY0FycmF5IGFiaV9yb3V0ZV90aHJlZURpbWVuc2lvbmFsVWludDE2QXJyYXkgYWJpX3JvdXRlX3NpbXBsZVR1cGxlIGFiaV9yb3V0ZV9hcnJheUluVHVwbGUgYWJpX3JvdXRlX3R1cGxlSW5BcnJheSBhYmlfcm91dGVfdHVwbGVJblR1cGxlIGFiaV9yb3V0ZV9zaG9ydFR5cGVOb3RhdGlvbiBhYmlfcm91dGVfZGlzZ3VzdGluZyBhYmlfcm91dGVfcmV0dXJuVHVwbGUgYWJpX3JvdXRlX3R1cGxlQXJnIGFiaV9yb3V0ZV9keW5hbWljQXJyYXkgYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheSBhYmlfcm91dGVfZHluYW1pY0FycmF5QXJnIGFiaV9yb3V0ZV91cGRhdGVEeW5hbWljQXJyYXlFbGVtZW50IGFiaV9yb3V0ZV9keW5hbWljVHVwbGVBcnJheSBhYmlfcm91dGVfcmV0dXJuVHVwbGVXaXRoRHlhbWljQXJyYXkgYWJpX3JvdXRlX3JldHVybkR5bmFtaWNBcnJheUZyb21UdXBsZSBhYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5SW5UdXBsZSBhYmlfcm91dGVfbm9uTGl0ZXJhbER5bmFtaWNFbGVtZW50SW5UdXBsZSBhYmlfcm91dGVfYXJyYXlQdXNoIGFiaV9yb3V0ZV9hcnJheVBvcCBhYmlfcm91dGVfYXJyYXlQb3BWYWx1ZSBhYmlfcm91dGVfYXJyYXlTcGxpY2UgYWJpX3JvdXRlX2FycmF5U3BsaWNlVmFsdWUgYWJpX3JvdXRlX2R5bmFtaWNBcnJheUVsZW1lbnRzIGFiaV9yb3V0ZV9zcGxpY2VMYXN0RWxlbWVudCBhYmlfcm91dGVfc3BsaWNlTGFzdEVsZW1lbnRWYWx1ZSBhYmlfcm91dGVfc3BsaWNlRmlyc3RFbGVtZW50IGFiaV9yb3V0ZV9zcGxpY2VGaXJzdEVsZW1lbnRWYWx1ZSBhYmlfcm91dGVfc3RyaW5nUmV0dXJuIGFiaV9yb3V0ZV9zdHJpbmdBcmcgYWJpX3JvdXRlX3N0cmluZ0luVHVwbGUgYWJpX3JvdXRlX2FjY2VzU3RyaW5nSW5UdXBsZSBhYmlfcm91dGVfdXBkYXRlU3RyaW5nSW5UdXBsZSBhYmlfcm91dGVfdXBkYXRlVHVwbGVXaXRoT25seUR5bmFtaWNUeXBlcyBhYmlfcm91dGVfc2hvcnRlbkR5bmFtaWNFbGVtZW50SW5UdXBsZSBhYmlfcm91dGVfbmFtZWRUdXBsZSBhYmlfcm91dGVfdXBkYXRlTmFtZWRUdXBsZSBhYmlfcm91dGVfY3VzdG9tVHlwZXMgYWJpX3JvdXRlX3N0YXRpY1N0cmluZ0FycmF5QXJnIGFiaV9yb3V0ZV9keW5hbWljQWNjZXNzT2ZEeW5hbWljRWxlbWVudEluU3RhdGljQXJyYXkgYWJpX3JvdXRlX2R5bmFtaWNBcnJheUluTWlkZGxlT2ZUdXBsZSBhYmlfcm91dGVfYWNjZXNzRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxlIGFiaV9yb3V0ZV9hY2Nlc3NEeW5hbWljQXJyYXlFbGVtZW50SW5UdXBsZSBhYmlfcm91dGVfdXBkYXRlRHluYW1pY0FycmF5SW5NaWRkbGVPZlR1cGxl"; override clearProgram: string = "I3ByYWdtYSB2ZXJzaW9uIDgKaW50IDEKcmV0dXJu"; override methods: algosdk.ABIMethod[] = [ new algosdk.ABIMethod({ name: "staticArray", desc: "", args: [], returns: { type: "uint64", desc: "" } }), diff --git a/tests/contracts/tsconfig.json b/tests/contracts/tsconfig.json new file mode 100644 index 000000000..5e3106d17 --- /dev/null +++ b/tests/contracts/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}