Coverage for cuda/core/_device.pyx: 92.87%

477 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-19 01:12 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8  

9from cuda.bindings cimport cydriver 

10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN 

11from libcpp.vector cimport vector 

12  

13import threading 

14  

15from cuda.core._context cimport Context 

16from cuda.core._context import ContextOptions 

17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource 

18from cuda.core._event cimport Event as cyEvent 

19from cuda.core._event import Event, EventOptions 

20from cuda.core._memory._buffer cimport Buffer, MemoryResource 

21from cuda.core._resource_handles cimport ( 

22 ContextHandle, 

23 GreenCtxHandle, 

24 create_context_handle_ref, 

25 create_green_ctx_handle, 

26 get_primary_context, 

27 get_last_error, 

28 as_cu, 

29) 

30  

31from cuda.core._stream import IsStreamType, Stream 

32from cuda.core._utils.clear_error_support import assert_type 

33from cuda.core._utils.cuda_utils import ( 

34 ComputeCapability, 

35 CUDAError, 

36 driver, 

37 handle_return, 

38 runtime, 

39) 

40from cuda.core._stream cimport default_stream 

41  

42from typing import TYPE_CHECKING 

43  

44if TYPE_CHECKING: 

45 import cuda.core.system # no-cython-lint 

46 from cuda.core.graph import GraphBuilder 

47 from cuda.core.texture import ( 

48 MipmappedArray, 

49 MipmappedArrayOptions, 

50 OpaqueArray, 

51 OpaqueArrayOptions, 

52 ResourceDescriptor, 

53 SurfaceObject, 

54 TextureObject, 

55 TextureObjectOptions, 

56 ) 

57  

58# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python, 

59# but it seems it is very convenient to expose them for testing purposes... 

60_tls = threading.local() 

61_lock = threading.Lock() 

62cdef bint _is_cuInit = False 

63  

64  

65cdef class DeviceProperties: 

66 """ 

67 A class to query various attributes of a CUDA device. 

68  

69 Attributes are read-only and provide information about the device. 

70 """ 

71 cdef: 

72 int _handle 

73 dict _cache 

74  

75 def __init__(self, *args, **kwargs) -> None: 

76 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 25I

77  

78 @classmethod 

79 def _init(cls, handle: int) -> DeviceProperties: 

80 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

81 self._handle = handle 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

82 self._cache = {} 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

83 return self 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

84  

85 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2: 

86 """Retrieve the attribute value directly from the driver.""" 

87 cdef int val 

88 cdef cydriver.CUresult err 

89 with nogil: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

90 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

91 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

92 return <int>default 

93 HANDLE_RETURN(err) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

94 return val 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

95  

96 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2: 

97 """Retrieve the attribute value, using cache if applicable.""" 

98 cached = self._cache.get(attr) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

99 if cached is not None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

100 return cached 22f3f4f5f6f7fFfabYl3p(A+m~lze8e9e,BAe+A,A-AxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h

101 cdef int value = self._get_attribute(attr, default) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

102 self._cache[attr] = value # setdefault not needed for ints 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

103 return value 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

104  

105 @property 

106 def max_threads_per_block(self) -> int: 

107 """int: Maximum number of threads per block.""" 

108 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2uAWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y+AlBmBnBoBpBqB,ArBsBtBuBvBwB-AxByBzBABBBCB

109  

110 @property 

111 def max_block_dim_x(self) -> int: 

112 """int: Maximum block dimension X.""" 

113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2kA

114  

115 @property 

116 def max_block_dim_y(self) -> int: 

117 """int: Maximum block dimension Y.""" 

118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2lA

119  

120 @property 

121 def max_block_dim_z(self) -> int: 

122 """int: Maximum block dimension Z.""" 

123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2mA

124  

125 @property 

126 def max_grid_dim_x(self) -> int: 

127 """int: Maximum grid dimension X.""" 

128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2oAYl

129  

130 @property 

131 def max_grid_dim_y(self) -> int: 

132 """int: Maximum grid dimension Y.""" 

133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2a pA

134  

135 @property 

136 def max_grid_dim_z(self) -> int: 

137 """int: Maximum grid dimension Z.""" 

138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2fl

139  

140 @property 

141 def max_shared_memory_per_block(self) -> int: 

142 """int: Maximum shared memory available per block in bytes.""" 

143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2tAWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y+AlBmBnBoBpBqB,ArBsBtBuBvBwB-AxByBzBABBBCB

144  

145 @property 

146 def total_constant_memory(self) -> int: 

147 """int: Memory available on device for constant variables in a CUDA C kernel in bytes.""" 

148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2#A

149  

150 @property 

151 def warp_size(self) -> int: 

152 """int: Warp size in threads.""" 

153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2'A

154  

155 @property 

156 def max_pitch(self) -> int: 

157 """int: Maximum pitch in bytes allowed by memory copies.""" 

158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2rA

159  

160 @property 

161 def maximum_texture1d_width(self) -> int: 

162 """int: Maximum 1D texture width.""" 

163 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2HA

164  

165 @property 

166 def maximum_texture1d_linear_width(self) -> int: 

167 """int: Maximum width for a 1D texture bound to linear memory.""" 

168 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2GA

169  

170 @property 

171 def maximum_texture1d_mipmapped_width(self) -> int: 

172 """int: Maximum mipmapped 1D texture width.""" 

173 return self._get_cached_attribute( 2Jz

174 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2Jz

175 ) 

176  

177 @property 

178 def maximum_texture2d_width(self) -> int: 

179 """int: Maximum 2D texture width.""" 

180 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2gl

181  

182 @property 

183 def maximum_texture2d_height(self) -> int: 

184 """int: Maximum 2D texture height.""" 

185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2KA

186  

187 @property 

188 def maximum_texture2d_linear_width(self) -> int: 

189 """int: Maximum width for a 2D texture bound to linear memory.""" 

190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2OA

191  

192 @property 

193 def maximum_texture2d_linear_height(self) -> int: 

194 """int: Maximum height for a 2D texture bound to linear memory.""" 

195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2MA

196  

197 @property 

198 def maximum_texture2d_linear_pitch(self) -> int: 

199 """int: Maximum pitch in bytes for a 2D texture bound to linear memory.""" 

200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2NA

201  

202 @property 

203 def maximum_texture2d_mipmapped_width(self) -> int: 

204 """int: Maximum mipmapped 2D texture width.""" 

205 return self._get_cached_attribute( 2Mz

206 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2Mz

207 ) 

208  

209 @property 

210 def maximum_texture2d_mipmapped_height(self) -> int: 

211 """int: Maximum mipmapped 2D texture height.""" 

212 return self._get_cached_attribute( 2`k

213 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2`k

214 ) 

215  

216 @property 

217 def maximum_texture3d_width(self) -> int: 

218 """int: Maximum 3D texture width.""" 

219 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2RA

220  

221 @property 

222 def maximum_texture3d_height(self) -> int: 

223 """int: Maximum 3D texture height.""" 

224 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2QA

225  

226 @property 

227 def maximum_texture3d_depth(self) -> int: 

228 """int: Maximum 3D texture depth.""" 

229 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2PA

230  

231 @property 

232 def maximum_texture3d_width_alternate(self) -> int: 

233 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported.""" 

234 return self._get_cached_attribute( 2Pz

235 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2Pz

236 ) 

237  

238 @property 

239 def maximum_texture3d_height_alternate(self) -> int: 

240 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported.""" 

241 return self._get_cached_attribute( 2Oz

242 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2Oz

243 ) 

244  

245 @property 

246 def maximum_texture3d_depth_alternate(self) -> int: 

247 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported.""" 

248 return self._get_cached_attribute( 2Nz

249 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2Nz

250 ) 

251  

252 @property 

253 def maximum_texturecubemap_width(self) -> int: 

254 """int: Maximum cubemap texture width or height.""" 

255 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2SA

256  

257 @property 

258 def maximum_texture1d_layered_width(self) -> int: 

259 """int: Maximum 1D layered texture width.""" 

260 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2FA

261  

262 @property 

263 def maximum_texture1d_layered_layers(self) -> int: 

264 """int: Maximum layers in a 1D layered texture.""" 

265 return self._get_cached_attribute( 2Iz

266 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2Iz

267 ) 

268  

269 @property 

270 def maximum_texture2d_layered_width(self) -> int: 

271 """int: Maximum 2D layered texture width.""" 

272 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2LA

273  

274 @property 

275 def maximum_texture2d_layered_height(self) -> int: 

276 """int: Maximum 2D layered texture height.""" 

277 return self._get_cached_attribute( 2Kz

278 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2Kz

279 ) 

280  

281 @property 

282 def maximum_texture2d_layered_layers(self) -> int: 

283 """int: Maximum layers in a 2D layered texture.""" 

284 return self._get_cached_attribute( 2Lz

285 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Lz

286 ) 

287  

288 @property 

289 def maximum_texturecubemap_layered_width(self) -> int: 

290 """int: Maximum cubemap layered texture width or height.""" 

291 return self._get_cached_attribute( 2Rz

292 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2Rz

293 ) 

294  

295 @property 

296 def maximum_texturecubemap_layered_layers(self) -> int: 

297 """int: Maximum layers in a cubemap layered texture.""" 

298 return self._get_cached_attribute( 2Qz

299 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2Qz

300 ) 

301  

302 @property 

303 def maximum_surface1d_width(self) -> int: 

304 """int: Maximum 1D surface width.""" 

305 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2xA

306  

307 @property 

308 def maximum_surface2d_width(self) -> int: 

309 """int: Maximum 2D surface width.""" 

310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2AA

311  

312 @property 

313 def maximum_surface2d_height(self) -> int: 

314 """int: Maximum 2D surface height.""" 

315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2yA

316  

317 @property 

318 def maximum_surface3d_width(self) -> int: 

319 """int: Maximum 3D surface width.""" 

320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2DA

321  

322 @property 

323 def maximum_surface3d_height(self) -> int: 

324 """int: Maximum 3D surface height.""" 

325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2CA

326  

327 @property 

328 def maximum_surface3d_depth(self) -> int: 

329 """int: Maximum 3D surface depth.""" 

330 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2BA

331  

332 @property 

333 def maximum_surface1d_layered_width(self) -> int: 

334 """int: Maximum 1D layered surface width.""" 

335 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2wA

336  

337 @property 

338 def maximum_surface1d_layered_layers(self) -> int: 

339 """int: Maximum layers in a 1D layered surface.""" 

340 return self._get_cached_attribute( 2Dz

341 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2Dz

342 ) 

343  

344 @property 

345 def maximum_surface2d_layered_width(self) -> int: 

346 """int: Maximum 2D layered surface width.""" 

347 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2zA

348  

349 @property 

350 def maximum_surface2d_layered_height(self) -> int: 

351 """int: Maximum 2D layered surface height.""" 

352 return self._get_cached_attribute( 2Ez

353 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2Ez

354 ) 

355  

356 @property 

357 def maximum_surface2d_layered_layers(self) -> int: 

358 """int: Maximum layers in a 2D layered surface.""" 

359 return self._get_cached_attribute( 2Fz

360 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2Fz

361 ) 

362  

363 @property 

364 def maximum_surfacecubemap_width(self) -> int: 

365 """int: Maximum cubemap surface width.""" 

366 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2EA

367  

368 @property 

369 def maximum_surfacecubemap_layered_width(self) -> int: 

370 """int: Maximum cubemap layered surface width.""" 

371 return self._get_cached_attribute( 2Hz

372 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2Hz

373 ) 

374  

375 @property 

376 def maximum_surfacecubemap_layered_layers(self) -> int: 

377 """int: Maximum layers in a cubemap layered surface.""" 

378 return self._get_cached_attribute( 2Gz

379 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2Gz

380 ) 

381  

382 @property 

383 def max_registers_per_block(self) -> int: 

384 """int: Maximum number of 32-bit registers available to a thread block.""" 

385 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2sA

386  

387 @property 

388 def clock_rate(self) -> int: 

389 """int: Typical clock frequency in kilohertz.""" 

390 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 21foz6Bbb2mcb

391  

392 @property 

393 def texture_alignment(self) -> int: 

394 """int: Alignment requirement for textures.""" 

395 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 29A

396  

397 @property 

398 def texture_pitch_alignment(self) -> int: 

399 """int: Pitch alignment requirement for textures.""" 

400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2!A

401  

402 @property 

403 def gpu_overlap(self) -> bool: 

404 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead.""" 

405 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2~z

406  

407 @property 

408 def multiprocessor_count(self) -> int: 

409 """int: Number of multiprocessors on device.""" 

410 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 20AYl

411  

412 @property 

413 def kernel_exec_timeout(self) -> bool: 

414 """bool: Specifies whether there is a run time limit on kernels.""" 

415 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 28B

416  

417 @property 

418 def integrated(self) -> bool: 

419 """bool: Device is integrated with host memory.""" 

420 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2eA

421  

422 @property 

423 def can_map_host_memory(self) -> bool: 

424 """bool: Device can map host memory into CUDA address space.""" 

425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2cl

426  

427 @property 

428 def compute_mode(self) -> int: 

429 """int: Compute mode (See CUcomputemode for details).""" 

430 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 27B

431  

432 @property 

433 def concurrent_kernels(self) -> bool: 

434 """bool: Device can possibly execute multiple kernels concurrently.""" 

435 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2[z

436  

437 @property 

438 def ecc_enabled(self) -> bool: 

439 """bool: Device has ECC support enabled.""" 

440 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2el

441  

442 @property 

443 def pci_bus_id(self) -> int: 

444 """int: PCI bus ID of the device.""" 

445 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 24A

446  

447 @property 

448 def pci_device_id(self) -> int: 

449 """int: PCI device ID of the device.""" 

450 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 25A

451  

452 @property 

453 def pci_domain_id(self) -> int: 

454 """int: PCI domain ID of the device.""" 

455 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 26A

456  

457 @property 

458 def tcc_driver(self) -> bool: 

459 """bool: Device is using TCC driver model.""" 

460 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 28A

461  

462 @property 

463 def memory_clock_rate(self) -> int: 

464 """int: Peak memory clock frequency in kilohertz.""" 

465 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 29B

466  

467 @property 

468 def global_memory_bus_width(self) -> int: 

469 """int: Global memory bus width in bits.""" 

470 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2{z

471  

472 @property 

473 def l2_cache_size(self) -> int: 

474 """int: Size of L2 cache in bytes.""" 

475 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2gA

476  

477 @property 

478 def max_threads_per_multiprocessor(self) -> int: 

479 """int: Maximum resident threads per multiprocessor.""" 

480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2vAWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y

481  

482 @property 

483 def unified_addressing(self) -> bool: 

484 """bool: Device shares a unified address space with the host.""" 

485 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a $A

486  

487 @property 

488 def compute_capability_major(self) -> int: 

489 """int: Major compute capability version number.""" 

490 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcr?zbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf

491  

492 @property 

493 def compute_capability_minor(self) -> int: 

494 """int: Minor compute capability version number.""" 

495 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcr@zbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf

496  

497 @property 

498 def global_l1_cache_supported(self) -> bool: 

499 """bool: Device supports caching globals in L1.""" 

500 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2`z

501  

502 @property 

503 def local_l1_cache_supported(self) -> bool: 

504 """bool: Device supports caching locals in L1.""" 

505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2hA

506  

507 @property 

508 def max_shared_memory_per_multiprocessor(self) -> int: 

509 """int: Maximum shared memory available per multiprocessor in bytes.""" 

510 return self._get_cached_attribute( 2CzWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y

511 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2CzWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y

512 ) 

513  

514 @property 

515 def max_registers_per_multiprocessor(self) -> int: 

516 """int: Maximum number of 32-bit registers available per multiprocessor.""" 

517 return self._get_cached_attribute( 2Az9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y

518 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2Az9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y

519 ) 

520  

521 @property 

522 def managed_memory(self) -> bool: 

523 """bool: Device can allocate managed memory on this system.""" 

524 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagiA

525  

526 @property 

527 def multi_gpu_board(self) -> bool: 

528 """bool: Device is on a multi-GPU board.""" 

529 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2YA

530  

531 @property 

532 def multi_gpu_board_group_id(self) -> int: 

533 """int: Unique id for a group of devices on the same multi-GPU board.""" 

534 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2il

535  

536 @property 

537 def host_native_atomic_supported(self) -> bool: 

538 """bool: Link between the device and the host supports all native atomic operations.""" 

539 return bool( 2xz

540 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2xz

541 ) 

542  

543 @property 

544 def single_to_double_precision_perf_ratio(self) -> int: 

545 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance.""" 

546 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2em

547  

548 @property 

549 def pageable_memory_access(self) -> bool: 

550 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it.""" 

551 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 23A

552  

553 @property 

554 def concurrent_managed_access(self) -> bool: 

555 """bool: Device can coherently access managed memory concurrently with the CPU.""" 

556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 22f3f4f5f6f7f*f+f,f-f.f/f:f;f=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagdlbgcgdgwrYfbn3mcndr3pdnenWlwnfn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yrn%m

557  

558 @property 

559 def compute_preemption_supported(self) -> bool: 

560 """bool: Device supports compute preemption.""" 

561 return bool( 2rz

562 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2rz

563 ) 

564  

565 @property 

566 def can_use_host_pointer_for_registered_mem(self) -> bool: 

567 """bool: Device can access host registered memory at the same virtual address as the CPU.""" 

568 return bool( 2ez

569 self._get_cached_attribute( 2ez

570 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2ez

571 ) 

572 ) 

573  

574 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

575  

576 @property 

577 def cooperative_launch(self) -> bool: 

578 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel.""" 

579 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2]zYl

580  

581 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

582  

583 @property 

584 def max_shared_memory_per_block_optin(self) -> int: 

585 """int: Maximum optin shared memory per block.""" 

586 return self._get_cached_attribute( 2Bz

587 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2Bz

588 ) 

589  

590 @property 

591 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

592 """bool: Device accesses pageable memory via the host's page tables.""" 

593 return bool( 2lz

594 self._get_cached_attribute( 2lz

595 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2lz

596 ) 

597 ) 

598  

599 @property 

600 def direct_managed_mem_access_from_host(self) -> bool: 

601 """bool: The host can directly access managed memory on the device without migration.""" 

602 return bool( 2-k

603 self._get_cached_attribute( 2-k

604 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2-k

605 ) 

606 ) 

607  

608 @property 

609 def virtual_memory_management_supported(self) -> bool: 

610 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs.""" 

611 return bool( 2/kze8e9e,BAe4p

612 self._get_cached_attribute( 2/kze8e9e,BAe4p

613 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2/kze8e9e,BAe4p

614 ) 

615 ) 

616  

617 @property 

618 def handle_type_posix_file_descriptor_supported(self) -> bool: 

619 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

620 return bool( 2W l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbhzEbFb5bGbQ R U V

621 self._get_cached_attribute( 2W l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbhzEbFb5bGbQ R U V

622 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2W l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbhzEbFb5bGbQ R U V

623 ) 

624 ) 

625  

626 @property 

627 def handle_type_win32_handle_supported(self) -> bool: 

628 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

629 return bool( 2uz

630 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2uz

631 ) 

632  

633 @property 

634 def handle_type_win32_kmt_handle_supported(self) -> bool: 

635 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

636 return bool( 2iz

637 self._get_cached_attribute( 2iz

638 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2iz

639 ) 

640 ) 

641  

642 @property 

643 def max_blocks_per_multiprocessor(self) -> int: 

644 """int: Maximum number of blocks per multiprocessor.""" 

645 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2nA

646  

647 @property 

648 def generic_compression_supported(self) -> bool: 

649 """bool: Device supports compression of memory.""" 

650 return bool( 2_k

651 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2_k

652 ) 

653  

654 @property 

655 def max_persisting_l2_cache_size(self) -> int: 

656 """int: Maximum L2 persisting lines capacity setting in bytes.""" 

657 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2qA

658  

659 @property 

660 def max_access_policy_window_size(self) -> int: 

661 """int: Maximum value of CUaccessPolicyWindow.num_bytes.""" 

662 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2jA

663  

664 @property 

665 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

666 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate.""" 

667 return bool( 2gz

668 self._get_cached_attribute( 2gz

669 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2gz

670 ) 

671 ) 

672  

673 @property 

674 def reserved_shared_memory_per_block(self) -> int: 

675 """int: Shared memory reserved by CUDA driver per block in bytes.""" 

676 return self._get_cached_attribute( 2Sz

677 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2Sz

678 ) 

679  

680 @property 

681 def sparse_cuda_array_supported(self) -> bool: 

682 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.""" 

683 return bool( 2Tz

684 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2Tz

685 ) 

686  

687 @property 

688 def read_only_host_register_supported(self) -> bool: 

689 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not.""" 

690 return bool( 2{k

691 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2{k

692 ) 

693  

694 @property 

695 def memory_pools_supported(self) -> bool: 

696 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs.""" 

697 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2zrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:q;q=q?q@q[q]q^q'z(z)z*z+z,z#f2f7hLfMf8hre9h!h#h$h%h$f3f'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f{hPfQf|hte}h~haibici'f5fdiRfSfeiuefigihiiiji(f6fkiTfUfliveminioipiqi)f7friVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPi-z.z_qYpZpUlVl`q{q|qMnNnOn}qPnQnRnSn~qarTnbrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%iW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbWAbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwn(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}y@irnYm%m[iZf0fEbFb5b]iGb^i_i`i{i|i}i~iajbjcjBe2g3gxhdjejfjCeyhzhgjhjHbIbJbKbLbijjjkjljmj{g|g}g~gahGfHfIfJfKfAhDe4g5gBhnjojpjEeChDhqjrj6g7g8g9g!gFe#g$gsjtjujEhFhvjwjxjyjzjAjBj8b9b!b#b$bHeIeJeCjDjEjFjGjKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%b'b(b)b*bRjSjTjUjVjbhchdhehfhHhIhJhKhLhOe*g+gMhWjXjYjPeNhOhZj0jSbTbUbVbWb1j2j3j4j5jghhhihjhkhqhrhshthuhPhQe,g-gQh6j7j8jReRhSh9j!j.g/g:g;g=gSe?g@g#j$j%jThUh'j(j)j*j+j,j-j/b:b;b=b?bUeVeWe.j/j:j;j=jXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b[b]b^b_b~jakbkckdklhmhnhohphQ R U V ekfkgkhkikWhXhYhZh0hjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkbz

698  

699 @property 

700 def gpu_direct_rdma_supported(self) -> bool: 

701 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information).""" 

702 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2|zAe4p

703  

704 @property 

705 def gpu_direct_rdma_flush_writes_options(self) -> int: 

706 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum.""" 

707 return self._get_cached_attribute( 2sz

708 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2sz

709 ) 

710  

711 @property 

712 def gpu_direct_rdma_writes_ordering(self) -> int: 

713 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here.""" 

714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2}z

715  

716 @property 

717 def mempool_supported_handle_types(self) -> int: 

718 """int: Handle types supported with mempool based IPC.""" 

719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2XA

720  

721 @property 

722 def deferred_mapping_cuda_array_supported(self) -> bool: 

723 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.""" 

724 return bool( 2fz

725 self._get_cached_attribute( 2fz

726 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2fz

727 ) 

728 ) 

729  

730 @property 

731 def numa_config(self) -> int: 

732 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum.""" 

733 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 21A

734  

735 @property 

736 def numa_id(self) -> int: 

737 """int: NUMA node ID of the GPU memory.""" 

738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 22A

739  

740 @property 

741 def multicast_supported(self) -> bool: 

742 """bool: Device supports switch multicast and reduction operations.""" 

743 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2ZA

744  

745 @property 

746 def surface_alignment(self) -> int: 

747 """int: Surface alignment requirement in bytes.""" 

748 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 27A

749  

750 @property 

751 def async_engine_count(self) -> int: 

752 """int: Number of asynchronous engines.""" 

753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2/z

754  

755 @property 

756 def can_tex2d_gather(self) -> bool: 

757 """bool: True if device supports 2D texture gather operations, False if not.""" 

758 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2;z

759  

760 @property 

761 def maximum_texture2d_gather_width(self) -> int: 

762 """int: Maximum 2D texture gather width.""" 

763 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2JA

764  

765 @property 

766 def maximum_texture2d_gather_height(self) -> int: 

767 """int: Maximum 2D texture gather height.""" 

768 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2IA

769  

770 @property 

771 def stream_priorities_supported(self) -> bool: 

772 """bool: True if device supports stream priorities, False if not.""" 

773 return bool( 2Uz

774 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Uz

775 ) 

776  

777 @property 

778 def can_flush_remote_writes(self) -> bool: 

779 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details.""" 

780 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2:z

781  

782 @property 

783 def host_register_supported(self) -> bool: 

784 """bool: Device supports host memory registration via cudaHostRegister.""" 

785 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2dA

786  

787 @property 

788 def timeline_semaphore_interop_supported(self) -> bool: 

789 """bool: External timeline semaphore interop is supported on the device.""" 

790 return bool( 2mz

791 self._get_cached_attribute( 2mz

792 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2mz

793 ) 

794 ) 

795  

796 @property 

797 def cluster_launch(self) -> bool: 

798 """bool: Indicates device supports cluster launch.""" 

799 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2=z

800  

801 @property 

802 def can_use_64_bit_stream_mem_ops(self) -> bool: 

803 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs.""" 

804 return bool( 2pz

805 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2pz

806 ) 

807  

808 @property 

809 def can_use_stream_wait_value_nor(self) -> bool: 

810 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs.""" 

811 return bool( 2qz

812 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2qz

813 ) 

814  

815 @property 

816 def dma_buf_supported(self) -> bool: 

817 """bool: Device supports buffer sharing with dma_buf mechanism.""" 

818 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2_z

819  

820 # Start of CUDA 12 device attributes 

821  

822 @property 

823 def ipc_event_supported(self) -> bool: 

824 """bool: Device supports IPC Events.""" 

825 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2fA

826  

827 @property 

828 def mem_sync_domain_count(self) -> int: 

829 """int: Number of memory domains the device supports.""" 

830 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2VA

831  

832 @property 

833 def tensor_map_access_supported(self) -> bool: 

834 """bool: Device supports accessing memory using Tensor Map.""" 

835 return bool( 2Vzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g

836 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2Vzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g

837 ) 

838  

839 @property 

840 def handle_type_fabric_supported(self) -> bool: 

841 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate().""" 

842 return bool( 2tz

843 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2tz

844 ) 

845  

846 @property 

847 def unified_function_pointers(self) -> bool: 

848 """bool: Device supports unified function pointers.""" 

849 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2jl

850  

851 @property 

852 def mps_enabled(self) -> bool: 

853 """bool: Indicates if contexts created on this device will be shared via MPS.""" 

854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2hl

855  

856 @property 

857 def host_numa_id(self) -> int: 

858 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA.""" 

859 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2l m n o p q r s t u v w x y z A B C D E F G H I J K L M N cA3p.iwh/i:i;i=ikl?ik ~lgm

860  

861 @property 

862 def d3d12_cig_supported(self) -> bool: 

863 """bool: Device supports CIG with D3D12.""" 

864 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2^z

865  

866 @property 

867 def mem_decompress_algorithm_mask(self) -> int: 

868 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum.""" 

869 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2TA

870  

871 @property 

872 def mem_decompress_maximum_length(self) -> int: 

873 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed.""" 

874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2UA

875  

876 @property 

877 def vulkan_cig_supported(self) -> bool: 

878 """bool: Device supports CIG with Vulkan.""" 

879 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2%A

880  

881 @property 

882 def gpu_pci_device_id(self) -> int: 

883 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID. 

884  

885 Returns 0 if the driver does not support this query. 

886 """ 

887 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2aA

888  

889 @property 

890 def gpu_pci_subsystem_id(self) -> int: 

891 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID. 

892  

893 Returns 0 if the driver does not support this query. 

894 """ 

895 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2bA

896  

897 @property 

898 def host_numa_virtual_memory_management_supported(self) -> bool: 

899 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

900 return bool( 2.k

901 self._get_cached_attribute( 2.k

902 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2.k

903 ) 

904 ) 

905  

906 @property 

907 def host_numa_memory_pools_supported(self) -> bool: 

908 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

909 return bool( 2yz

910 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2yz

911 ) 

912  

913 # Start of CUDA 13 device attributes 

914  

915 @property 

916 def host_numa_multinode_ipc_supported(self) -> bool: 

917 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system.""" 

918 return bool( 2zz

919 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2zz

920 ) 

921  

922 @property 

923 def host_memory_pools_supported(self) -> bool: 

924 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

925 return bool( 2l m n o p q r s t u v w x y z A B C D E F G H I J K L M N wzfmln.i#mwhmn/inn:ion;ipn=i$mklqn?isn'm0f(mXlk 7e~y~lgmaz

926 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2l m n o p q r s t u v w x y z A B C D E F G H I J K L M N wzfmln.i#mwhmn/inn:ion;ipn=i$mklqn?isn'm0f(mXlk 7e~y~lgmaz

927 ) 

928  

929 @property 

930 def host_virtual_memory_management_supported(self) -> bool: 

931 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

932 return bool( 2jz

933 self._get_cached_attribute( 2jz

934 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2jz

935 ) 

936 ) 

937  

938 @property 

939 def host_alloc_dma_buf_supported(self) -> bool: 

940 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism.""" 

941 return bool( 2vz

942 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2vz

943 ) 

944  

945 @property 

946 def only_partial_host_native_atomic_supported(self) -> bool: 

947 """bool: Link between the device and the host supports only some native atomic operations.""" 

948 return bool( 2kz

949 self._get_cached_attribute( 2kz

950 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2kz

951 ) 

952 ) 

953  

954  

955class Device: 

956 """Represent a GPU and act as an entry point for cuda.core features. 

957  

958 This is a singleton object that helps ensure interoperability 

959 across multiple libraries imported in the process to both see 

960 and use the same GPU device. 

961  

962 While acting as the entry point, many other CUDA resources can be 

963 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent 

964 resource created through this device, will continue to refer to 

965 this device's context. 

966  

967 Newly returned :obj:`~_device.Device` objects are thread-local singletons 

968 for a specified device. 

969  

970 Note 

971 ---- 

972 Will not initialize the GPU. 

973  

974 Parameters 

975 ---------- 

976 device_id : int, optional 

977 Device ordinal to return a :obj:`~_device.Device` object for. 

978 Default value of `None` return the currently used device. 

979  

980 """ 

981 __slots__ = ( 

982 "_device_id", 

983 "_memory_resource", 

984 "_has_inited", 

985 "_properties", 

986 "_resources", 

987 "_uuid", 

988 "_context", 

989 "__weakref__", 

990 ) 

991  

992 def __new__(cls, device_id: Device | int | None = None) -> Device: 

993 if isinstance(device_id, Device): 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tUGQiVGRiWGSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 xGp 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE0G[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbOGFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

994 return device_id 2UlVl`q{q|qMnNnOn}qPnQnRnSn~qarTnbrUGVGWGhm)mimjmkm*mlmmmW #BX $BY Z %n0 xG1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . )A*A/ : ; xryr^C_C`C{CXffGQlgGhGvn(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-i@iYm0GZf8e9e,BAekFbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqD?COG@C[CQ R

995  

996 Device_ensure_cuda_initialized() 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

997 device_id = Device_resolve_device_id(device_id) 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

998 devices = Device_ensure_tls_devices(cls) 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

999  

1000 try: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1001 return devices[device_id] 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1002 except IndexError: 2cGdG

1003 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2cGdG

1004  

1005 def _check_context_initialized(self) -> None: 

1006 if not self._has_inited: 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qLfMfNfOfPfQfRfSfTfUfVfWf_qEFFFhFYpSDTDUDZpVDUlVldm]m^mMnNnOnPnQnRnSnTnGF_m`m{m|m}m~mUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF|lwmanxmymzmTBAm}l7G8GKHLH9GMHNHHFIF!G#GOHPHQHRHSH!BUHVHWHXHYHZH0H1H2H3H4H5H1f6Hoz7HAGBGCGDGEGFGGGHG6G8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgI,mhItGiI{tjIaFkI)A*ADBlIzGmInIoIpIqIxryr^C_C`C{CJFKFLFMFNFOFFmGmiFPFZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVm`B{B|B}B~BaCbC#pcCdCeCfCgC'B(n0mcbEBFBYl;BGBnmll[yrIsI$GtI%GuIvI'G(GwIxIyI)GzI*G+G,G-G.G/G:G;G=GAI?G@G[G]GBI^G_GCIDIEIFI`GGI{GHIII|G}GJIKILI~GMIaHbHcHdHeHfHgHhHiHNIjHkHlHmHOInHoHPIQIRISIpHTIqHUIVIrHsHWIXIYItHZIuHvHwHxHyHzHAHBHCH0IDHEHFHGH1IHHIH2I3IQlWlvnwnfm0G1mXlk 7eOEQE`g:k;kPGmllqGoHoIonqnloqolpqJoKoLoqq2g3gHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNbMoNo{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzq1g0lRlSlTl1l4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(obh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqylJq)o*o+oKq*g+gSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb,o-ogh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqalwoFnGnHnxo,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplplhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2qQ R U V Il3qmpnpop4qJl5qppqprp6qKl7qsptpup8qLl9qvpwpxp!qMl#qypzpAp$qNl%qBpCpDp'qOl(qEpFpGp)qPl*qHpIpJp+q3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+F,FgF-F.FtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!E#EsFtFuF$EvFyDzD5zADBDCD6zDD7zEDFDGDHDwFSB5G

1007 raise CUDAError( 

1008 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?" 

1009 ) 

1010  

1011  

1012 @classmethod 

1013 def get_all_devices(cls) -> tuple[Device, ...]: 

1014 """ 

1015 Query the available device instances. 

1016  

1017 Returns 

1018 ------- 

1019 tuple of Device 

1020 A tuple containing instances of available devices. 

1021 """ 

1022 from cuda.core import system 26pFf8p9p!p'n:B|p}p~paqbqcqdqeqfqgqhqiqjqkqbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDbz

1023 total = system.get_num_devices() 26pFf8p9p!p'n:B|p}p~paqbqcqdqeqfqgqhqiqjqkqbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDbz

1024 return tuple(cls(device_id) for device_id in range(total)) 26pFf8p9p!p'n:B|p}p~paqbqcqdqeqfqgqhqiqjqkqbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDbz

1025  

1026 def to_system_device(self) -> 'cuda.core.system.Device': 

1027 """ 

1028 Get the corresponding :class:`cuda.core.system.Device` (which is used 

1029 for NVIDIA Management Library (NVML) access) for this 

1030 :class:`cuda.core.Device` (which is used for CUDA access). 

1031  

1032 The devices are mapped to one another by their UUID. 

1033  

1034 Returns 

1035 ------- 

1036 cuda.core.system.Device 

1037 The corresponding system-level device instance used for NVML access. 

1038 """ 

1039 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 22z

1040  

1041 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 22z

1042 raise RuntimeError( 

1043 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x" 

1044 ) 

1045  

1046 from cuda.core.system import Device as SystemDevice 22z

1047 return SystemDevice(uuid=self.uuid) 22z

1048  

1049 @property 

1050 def device_id(self) -> int: 

1051 """Return device ordinal.""" 

1052 return self._device_id 2zrAr#f2f$f3f%f4f'f5f(f6f)f7fUlVlzoAodm`q{q|qMnNnOn}qPnQnRnSn~qarTnbrUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF:F6I7G8G;FvG@y-BkC7IKHLH9GMHNHwG!G#G7pW QG#BX $BCoY IG.BZ JG%n0 xG1 1f2 Zl3 4 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) Do* KGLG+ MGEo, NG,m- tG{t. )A*ADB/ /B: Fo; xryr^C_C`C{CcrFmGm:BUB7DVB'B(n0myGll[yBmXffGQlgGhG_FYfdrvnwn(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-i@iYm0GZfOEQEze8e9e,BAekFtnun`F{F`g:k;k9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?ybDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqD?COG@C5b[CmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblnrorQ R IlJlKlLlMlNlOlPlhC6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTH8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_IVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k*k+k,kiC`I5G

1053  

1054 @property 

1055 def pci_bus_id(self) -> str: 

1056 """Return a PCI Bus Id string for this device.""" 

1057 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2'n7D2z

1058 return bus_id[:12].decode() 2'n7D2z

1059  

1060 def can_access_peer(self, peer: Device | int) -> bool: 

1061 """Check if this device can access memory from the specified peer device. 

1062  

1063 Queries whether peer-to-peer memory access is supported between this 

1064 device and the specified peer device. 

1065  

1066 Parameters 

1067 ---------- 

1068 peer : Device | int 

1069 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID. 

1070 """ 

1071 peer = Device(peer) 

1072 cdef int d1 = <int> self.device_id 

1073 cdef int d2 = <int> peer.device_id 

1074 if d1 == d2: 

1075 return True 

1076 cdef int value = 0 

1077 with nogil: 

1078 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2)) 

1079 return bool(value) 

1080  

1081 @property 

1082 def uuid(self) -> str: 

1083 """Return a UUID for the device. 

1084  

1085 Returns 16-octets identifying the device. If the device is in 

1086 MIG mode, returns its MIG UUID which uniquely identifies the 

1087 subscribed MIG compute instance. 

1088  

1089 Note 

1090 ---- 

1091 MIG UUID is only returned when device is in MIG mode and the 

1092 driver is older than CUDA 11.4. 

1093  

1094 The UUID is cached after first access to avoid repeated CUDA API calls. 

1095  

1096 """ 

1097 cdef cydriver.CUuuid uuid 

1098 cdef cydriver.CUdevice dev 

1099 cdef bytes uuid_b 

1100 cdef str uuid_hex 

1101  

1102 if self._uuid is None: 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1103 dev = self._device_id 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1104 with nogil: 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1105 IF CUDA_CORE_BUILD_MAJOR == 12: 

1106 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev)) 

1107 ELSE: # 13.0+ 

1108 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1109 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1110 uuid_hex = uuid_b.hex() 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1111 # 8-4-4-4-12 

1112 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1113 return self._uuid 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1114  

1115 @property 

1116 def name(self) -> str: 

1117 """Return the device name.""" 

1118 # Use 256 characters to be consistent with CUDA Runtime 

1119 cdef int LENGTH = 256 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1120 cdef bytes name = bytes(LENGTH) 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1121 cdef char* name_ptr = name 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1122 cdef cydriver.CUdevice this_dev = self._device_id 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1123 with nogil: 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1124 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1125 name = name.split(b"\0")[0] 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1126 return name.decode() 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm

1127  

1128 @property 

1129 def properties(self) -> DeviceProperties: 

1130 """Return a :obj:`~_device.DeviceProperties` class with information about the device.""" 

1131 if self._properties is None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmTBAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcrBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

1132 self._properties = DeviceProperties._init(self._device_id) 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

1133  

1134 return self._properties 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmTBAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcrBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g

1135  

1136 @property 

1137 def resources(self) -> DeviceResources: 

1138 """Return the hardware resource query namespace for this device.""" 

1139 if self._resources is None: 2$pNkOkb xeyePkQkRkSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p

1140 self._resources = DeviceResources._init(self._device_id) 2$pNkOkb xeyePkQkRkSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p

1141 return self._resources 2$pNkOkb xeyePkQkRkSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p

1142  

1143 @property 

1144 def compute_capability(self) -> ComputeCapability: 

1145 """Return a named tuple with 2 fields: major and minor.""" 

1146 cdef DeviceProperties prop = self.properties 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmTBAm}l1foz2pcrbb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nBfCfDfEf

1147 cached = prop._cache.get("compute_capability") 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmTBAm}l1foz2pcrbb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nBfCfDfEf

1148 if cached is not None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmTBAm}l1foz2pcrbb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nBfCfDfEf

1149 return cached 2a hm)mimjmkm*mlmmmCmDmEmTB2pVmb xeyeYl'D*D;B/A:A;A=A?A@A[Anz]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdc d dbebO P = ? 8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeRdSd%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dfbgbMe4dNe5de f hbibZb0b_ ` /b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe+d,d@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^djbkb_d`d{d|d}d~daeZebe0ecedeeefegeheiejekelemeneoepeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n

1150 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcrbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf

1151 return prop._cache.setdefault("compute_capability", cc) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcrbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf

1152  

1153 @property 

1154 def arch(self) -> str: 

1155 """Return compute capability as a string (e.g., '75' for CC 7.5).""" 

1156 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a hm)mimjmkm*mlmmmCmDmEm2pVmb xeye;BaDbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdc d dbebO P = ? 8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdRdSd%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dfbgb4d5de f hbibZb0b_ ` /b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*d+d,d@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^djbkb_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n

1157  

1158 @property 

1159 def context(self) -> Context: 

1160 """Return the :obj:`~_context.Context` associated with this device. 

1161  

1162 Note 

1163 ---- 

1164 Device must be initialized. 

1165  

1166 """ 

1167 self._check_context_initialized() 2lqpq{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzq0lznvoJqgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqwoInyo3q5q7q9q#q%q(q*q

1168 return self._context 2lqpq{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzq0lznvoJqgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqwoInyo3q5q7q9q#q%q(q*q

1169  

1170 @property 

1171 def memory_resource(self) -> MemoryResource: 

1172 """Return :obj:`~_memory.MemoryResource` associated with this device.""" 

1173 cdef int attr, device_id 

1174 if self._memory_resource is None: 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTHVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kiC4I5G

1175 # If the device is in TCC mode, or does not support memory pools for some other reason, 

1176 # use the SynchronousMemoryResource which does not use memory pools. 

1177 device_id = self._device_id 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1178 with nogil: 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1179 HANDLE_RETURN( 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1180 cydriver.cuDeviceGetAttribute( 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1181 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1182 ) 

1183 ) 

1184 if attr == 1: 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1185 from cuda.core._memory import DeviceMemoryResource 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1186 self._memory_resource = DeviceMemoryResource(self._device_id) 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC

1187 else: 

1188 from cuda.core._memory._legacy import _SynchronousMemoryResource 

1189 self._memory_resource = _SynchronousMemoryResource(self._device_id) 

1190  

1191 return self._memory_resource 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTHVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kiC4I5G

1192  

1193 @memory_resource.setter 

1194 def memory_resource(self, mr: MemoryResource) -> None: 

1195 from cuda.core._memory import MemoryResource 

1196 assert_type(mr, MemoryResource) 

1197 self._memory_resource = mr 

1198  

1199 @property 

1200 def default_stream(self) -> Stream: 

1201 """Return default CUDA :obj:`~_stream.Stream` associated with this device. 

1202  

1203 The type of default stream returned depends on if the environment 

1204 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1205  

1206 If set, returns a per-thread default stream. Otherwise returns 

1207 the legacy stream. 

1208  

1209 """ 

1210 return default_stream() 2UlVl`q{q|qMnNnOn}qPnQnRnSn~qarTnbr7G8G{I8f9G9f!f!G#GOHPHQHRHSH#B$BCoIG.BJG%nxG|I}IZl/F~I=FaJ?FbJ@FcJ[FdJ]FeJ^FfJgJhJiJjJkJlJmJnJoJpJqJDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTGxryr^C_C`C{CFmGm/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBll[yBmXfQlYf3mWlvnwnfmWmvhXm+m9m!m#mwh$mklYm%m'm0GZf0f(mXlk 7e`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblQ R IlJlKlLlMlNlOlPl|FdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTHVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kiC4I5G

1211  

1212 def __int__(self) -> int: 

1213 """Return device_id.""" 

1214 return self._device_id 2XGYGZG:FFmGm

1215  

1216 def __repr__(self) -> str: 

1217 return f"<Device {self._device_id} ({self.name})>" 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.ASm

1218  

1219 def __hash__(self) -> int: 

1220 return hash(self.uuid) 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb|C_B}C~C(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm

1221  

1222 def __eq__(self, other: object) -> bool: 

1223 if not isinstance(other, Device): 2@y-BW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbaG_BbGeG(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFbGbmqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrQ R U V bmcmgF

1224 return NotImplemented 2@y-BeGmqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrgF

1225 return self._device_id == other._device_id 2@yW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbaG_BbG(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFbGbmqQ R U V bmcm

1226  

1227 def __reduce__(self) -> tuple[object, ...]: 

1228 return Device, (self.device_id,) 27pQG#B$BCoIG.BJG%nxG1fZl=F?F@F[F]F^FDoKGLGMGEoNG,mtG{t)A*ADB/BFoxryr^C_C`C{Cnror

1229  

1230 def set_current(self, ctx: Context | None = None) -> Context | None: 

1231 """Set device to be used for GPU executions. 

1232  

1233 Initializes CUDA and sets the calling thread to a valid CUDA 

1234 context. By default the primary context is used, but optional `ctx` 

1235 parameter can be used to explicitly supply a :obj:`~_context.Context` object. 

1236  

1237 Providing a `ctx` causes the previous set context to be popped and returned. 

1238  

1239 Parameters 

1240 ---------- 

1241 ctx : :obj:`~_context.Context`, optional 

1242 Optional context to push onto this device's current thread stack. 

1243  

1244 Returns 

1245 ------- 

1246 :obj:`~_context.Context`, optional 

1247 Popped context. 

1248  

1249 Examples 

1250 -------- 

1251 Acts as an entry point of this object. Users always start a code by 

1252 calling this method, e.g. 

1253  

1254 >>> from cuda.core import Device 

1255 >>> dev0 = Device(0) 

1256 >>> dev0.set_current() 

1257 >>> # ... do work on device 0 ... 

1258  

1259 """ 

1260 cdef ContextHandle h_context 

1261 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1262 cdef Context prev_owned = None 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeye}FPkQkRkruSk~FTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1263  

1264 if ctx is not None: 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeye}FPkQkRkruSk~FTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1265 # TODO: revisit once Context is cythonized 

1266 assert_type(ctx, Context) 2}F~F

1267 if ctx._device_id != self._device_id: 2}F~F

1268 raise RuntimeError( 

1269 "the provided context was created on the device with" 

1270 f" id={ctx._device_id}, which is different from the target id={self._device_id}" 

1271 ) 

1272 if self._has_inited and self._context is not None: 2}F~F

1273 prev_owned = self._context 2}F~F

1274 # prev_ctx is the previous context 

1275 curr_ctx = as_cu(ctx._h_context) 2}F~F

1276 prev_ctx = NULL 2}F~F

1277 with nogil: 2}F~F

1278 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2}F~F

1279 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2}F~F

1280 self._has_inited = True 2}F~F

1281 self._context = ctx # Store owning context reference 2}F~F

1282 if prev_ctx != NULL: 2}F~F

1283 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2}F~F

1284 return prev_owned 2}F~F

1285 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id) 

1286 else: 

1287 # use primary ctx 

1288 h_context = get_primary_context(self._device_id) 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1289 if h_context.get() == NULL: 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1290 raise ValueError("Cannot set NULL context as current") 

1291 with nogil: 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1292 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1293 self._has_inited = True 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1294 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1295  

1296 def create_context(self, options: ContextOptions | None = None) -> Context: 

1297 """Create a new :obj:`~_context.Context` object. 

1298  

1299 Note 

1300 ---- 

1301 The newly created context will not be set as current. 

1302  

1303 Parameters 

1304 ---------- 

1305 options : :obj:`~_context.ContextOptions`, optional 

1306 Customizable dataclass for context creation options. 

1307  

1308 Returns 

1309 ------- 

1310 :obj:`~_context.Context` 

1311 Newly created context object. 

1312  

1313 """ 

1314 cdef int i 

1315 cdef object resources 

1316 cdef object res 

1317 cdef SMResource sm_res 

1318 cdef WorkqueueResource wq_res 

1319 cdef GreenCtxHandle h_green 

1320  

1321 if options is None: 2uGNkOkb (n0mPkQkRkSkTkUkRGJH

1322 raise ValueError( 2JH

1323 "options with device resources must be provided to create a green context" 

1324 ) 

1325  

1326 options = check_or_create_options(ContextOptions, options, "Context options") 2uGNkOkb (n0mPkQkRkSkTkUkRGJH

1327 if options.resources is None: 2uGNkOkb (n0mPkQkRkSkTkUkRGJH

1328 raise ValueError( 2JH

1329 "ContextOptions.resources must be provided to create a green context" 

1330 ) 

1331  

1332 resources = tuple(options.resources) 2uGNkOkb (n0mPkQkRkSkTkUkRG

1333 if len(resources) == 0: 2uGNkOkb (n0mPkQkRkSkTkUkRG

1334 raise ValueError("ContextOptions.resources must not be empty") 

1335  

1336 cdef vector[cydriver.CUdevResource] c_resources 

1337 c_resources.resize(len(resources)) 2uGNkOkb (n0mPkQkRkSkTkUkRG

1338  

1339 for i, res in enumerate(resources): 2uGNkOkb (n0mPkQkRkSkTkUkRG

1340 if isinstance(res, SMResource): 2uGNkOkb (n0mPkQkRkSkTkUkRG

1341 sm_res = <SMResource>res 2uGNkOkb (n0mPkQkRkSkTkUkRG

1342 if not sm_res._is_usable: 2uGNkOkb (n0mPkQkRkSkTkUkRG

1343 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2RG

1344 c_resources[i] = sm_res._resource 2uGNkOkb (n0mPkQkRkSkTkUk

1345 elif isinstance(res, WorkqueueResource): 20m

1346 wq_res = <WorkqueueResource>res 20m

1347 c_resources[i] = wq_res._wq_config_resource 20m

1348 else: 

1349 raise TypeError(f"Unsupported context resource type: {type(res)}") 

1350  

1351 h_green = create_green_ctx_handle( 2uGNkOkb (n0mPkQkRkSkTkUk

1352 c_resources.data(), 

1353 <unsigned int>(c_resources.size()), 

1354 <cydriver.CUdevice>(self._device_id), 2uGNkOkb (n0mPkQkRkSkTkUk

1355 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM), 

1356 ) 

1357 if h_green.get() == NULL: 2uGNkOkb (n0mPkQkRkSkTkUk

1358 HANDLE_RETURN(get_last_error()) 

1359 raise RuntimeError("Failed to create CUDA green context") 

1360  

1361 return Context._from_green_ctx(Context, h_green, self._device_id) 2uGNkOkb (n0mPkQkRkSkTkUk

1362  

1363 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream: 

1364 """Create a :obj:`~_stream.Stream` object. 

1365  

1366 New stream objects can be created in two different ways: 

1367  

1368 1) Create a new CUDA stream with customizable ``options``. 

1369 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol. 

1370  

1371 Option (2) internally holds a reference to the foreign object 

1372 such that the lifetime is managed. 

1373  

1374 Note 

1375 ---- 

1376 Device must be initialized. 

1377  

1378 Parameters 

1379 ---------- 

1380 obj : :obj:`~_stream.IsStreamType`, optional 

1381 Any object supporting the ``__cuda_stream__`` protocol. 

1382 options : :obj:`~_stream.StreamOptions`, optional 

1383 Customizable dataclass for stream creation options. 

1384  

1385 Returns 

1386 ------- 

1387 :obj:`~_stream.Stream` 

1388 Newly created stream object. 

1389  

1390 """ 

1391 self._check_context_initialized() 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^q_qEFFFTDUDUlVldm]m^mMnNnOnPnQnRnSnTnGF_m`m{m|m}m~mUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF|lwmanxmymzmTBAm}l7G8GKHLH9GMHNHHFIF!G#GOHPHQHRHSH!B1fozAGBGCGDGEGFGGGHG6G8H9H,mtG{taF)A*ADBzGxryr^C_C`C{CJFKFLFMFNFOFPFZmbbamQFRFSFTFUFVF2mWFXFYFZF0F1F2FVm`B{B|B}B~BaCbC#pcCdCeCfCgCcbEBFBYl;BGBnmrIsI$GtI%GuIvI'G(GwIxIyI)GzI*G+G,G-G.G/G:G;G=GAI?G@G[G]GBI^G_GCIDIEIFI`GGI{GHIII|G}GJIKILI~GMIaHbHcHdHeHfHgHhHiHNIjHkHlHmHOInHoHPIQIRISIpHTIqHUIVIrHsHWIXIYItHZIuHvHwHxHyHzHAHBHCH0IDHEHFHGH1IHHIH2I3IQlWl1mXlOEQE`g:k;kPGnqoqqq1lbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqKqxolhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2qU V 4q6q8q!q$q'q)q+q3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+F,FgF-F.F6xdz8E9E!E$E5G

1392 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^q_qEFFFTDUDUlVldm]m^mMnNnOnPnQnRnSnTnGF_m`m{m|m}m~mUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF|lwmanxmymzmTBAm}l7G8GKHLH9GMHNHHFIF!G#GOHPHQHRHSH!B1fozAGBGCGDGEGFGGGHG6G8H9H,mtG{taF)A*ADBzGxryr^C_C`C{CJFKFLFMFNFOFPFZmbbamQFRFSFTFUFVF2mWFXFYFZF0F1F2FVm`B{B|B}B~BaCbC#pcCdCeCfCgCcbEBFBYl;BGBnmrIsI$GtI%GuIvI'G(GwIxIyI)GzI*G+G,G-G.G/G:G;G=GAI?G@G[G]GBI^G_GCIDIEIFI`GGI{GHIII|G}GJIKILI~GMIaHbHcHdHeHfHgHhHiHNIjHkHlHmHOInHoHPIQIRISIpHTIqHUIVIrHsHWIXIYItHZIuHvHwHxHyHzHAHBHCH0IDHEHFHGH1IHHIH2I3IQlWl1mXlOEQE`g:k;kPGnqoqqq1lbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqKqxolhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2qU V 4q6q8q!q$q'q)q+q3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+F,FgF-F.F6xdz8E9E!E$E5G

1393  

1394 def create_event(self, options: EventOptions | None = None) -> Event: 

1395 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`. 

1396  

1397 Note 

1398 ---- 

1399 Device must be initialized. 

1400  

1401 Parameters 

1402 ---------- 

1403 options : :obj:`EventOptions`, optional 

1404 Customizable dataclass for event creation options. 

1405  

1406 Returns 

1407 ------- 

1408 :obj:`~_event.Event` 

1409 Newly created event object. 

1410  

1411 """ 

1412 self._check_context_initialized() 2QDLfMfNfOfPfQfRfSfTfUfVfWfhFYpSDTDUDZpVDdm6GiFamjFHm8DGoHoIoJoKoLo2g3g=k?kMbNbMoNoxnynRlSlTl4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(oAnBnCn)o*o+o*g+g[k]kXbYb,o-oDnEnFnGnHn,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplpJnKnLnmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJp

1413 cdef Context ctx = self._context 2QDLfMfNfOfPfQfRfSfTfUfVfWfhFYpSDTDUDZpVDdm6GiFamjFHm8DGoHoIoJoKoLo2g3g=k?kMbNbMoNoxnynRlSlTl4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(oAnBnCn)o*o+o*g+g[k]kXbYb,o-oDnEnFnGnHn,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplpJnKnLnmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJp

1414 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2QDLfMfNfOfPfQfRfSfTfUfVfWfhFYpSDTDUDZpVDdm6GiFamjFHm8DGoHoIoJoKoLo2g3g=k?kMbNbMoNoxnynRlSlTl4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(oAnBnCn)o*o+o*g+g[k]kXbYb,o-oDnEnFnGnHn,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplpJnKnLnmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJp

1415  

1416 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer: 

1417 """Allocate device memory from a specified stream. 

1418  

1419 Allocates device memory of `size` bytes on the specified `stream` 

1420 using the memory resource currently associated with this Device. 

1421  

1422 Note 

1423 ---- 

1424 Device must be initialized. 

1425  

1426 Parameters 

1427 ---------- 

1428 size : int 

1429 Number of bytes to allocate. 

1430 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

1431 Keyword-only. The stream establishing the stream ordering semantic. 

1432 Must be passed explicitly; pass ``self.default_stream`` to use 

1433 the default stream. 

1434  

1435 Returns 

1436 ------- 

1437 :obj:`~_memory.Buffer` 

1438 Newly created buffer object. 

1439  

1440 """ 

1441 self._check_context_initialized() 2FmGm'B(n0mll[ymlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl

1442 return self.memory_resource.allocate(size, stream=stream) 2FmGm'B(n0mll[ymlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl

1443  

1444 def sync(self) -> None: 

1445 """Synchronize the device. 

1446  

1447 Note 

1448 ---- 

1449 Device must be initialized. 

1450  

1451 """ 

1452 self._check_context_initialized() 2UHVHWHXHYHZH0H1H2H3H4H5H6H7H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkI)A*AlImInIoIpIqIxryr^C_C`C{CFmGmEBFBGBnm$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHQlWlvnwnfm0GXlk 7eQ R

1453 handle_return(runtime.cudaDeviceSynchronize()) 2UHVHWHXHYHZH0H1H2H3H4H5H6H7H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkI)A*AlImInIoIpIqIxryr^C_C`C{CFmGmEBFBGBnm$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHQlWlvnwnfm0GXlk 7eQ R

1454  

1455 def create_graph_builder(self) -> GraphBuilder: 

1456 """Create a new :obj:`~graph.GraphBuilder` object. 

1457  

1458 Returns 

1459 ------- 

1460 :obj:`~graph.GraphBuilder` 

1461 Newly created graph builder object. 

1462  

1463 """ 

1464 from cuda.core.graph._graph_builder import GraphBuilder 2IDJDompm2l3ljC4lqmKDLD5lrmsmMD6lND7lODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lUGVGWG2G3G4GhmimjmkmlmmmCmDmEmXGYGZGbFcFdF|lwmxmymzmTBAm}l6x

1465  

1466 self._check_context_initialized() 2IDJDompm2l3ljC4lqmKDLD5lrmsmMD6lND7lODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lUGVGWG2G3G4GhmimjmkmlmmmCmDmEmXGYGZGbFcFdF|lwmxmymzmTBAm}l6x

1467 return GraphBuilder._init(self.create_stream()) 2IDJDompm2l3ljC4lqmKDLD5lrmsmMD6lND7lODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lUGVGWG2G3G4GhmimjmkmlmmmCmDmEmXGYGZGbFcFdF|lwmxmymzmTBAm}l6x

1468  

1469 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray: 

1470 """Create an :obj:`~cuda.core.texture.OpaqueArray` on the current device. 

1471  

1472 Allocates an opaque, hardware-laid-out CUDA array for texture/surface 

1473 access. The array is created in the current CUDA context, so make this 

1474 device current with :meth:`set_current` before calling (mirroring 

1475 :meth:`create_stream` / :meth:`create_event`). 

1476  

1477 Note 

1478 ---- 

1479 Device must be initialized. 

1480  

1481 Parameters 

1482 ---------- 

1483 options : :obj:`~cuda.core.texture.OpaqueArrayOptions` 

1484 Allocation options (shape, format, channels, surface flag). 

1485  

1486 Returns 

1487 ------- 

1488 :obj:`~cuda.core.texture.OpaqueArray` 

1489 Newly created opaque array. 

1490  

1491 .. versionadded:: 1.1.0 

1492 """ 

1493 from cuda.core.texture._array import _create_opaque_array 2tDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!EyDzDBDCDEDFDGDHDSB

1494  

1495 self._check_context_initialized() 2tDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!EyDzDBDCDEDFDGDHDSB

1496 return _create_opaque_array(options) 2tDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!EyDzDBDCDEDFDGDHDSB

1497  

1498 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray: 

1499 """Create a :obj:`~cuda.core.texture.MipmappedArray` on the current device. 

1500  

1501 Allocates a mipmapped CUDA array for texture/surface access across 

1502 levels. The array is created in the current CUDA context, so make this 

1503 device current with :meth:`set_current` before calling (mirroring 

1504 :meth:`create_stream` / :meth:`create_event`). 

1505  

1506 Note 

1507 ---- 

1508 Device must be initialized. 

1509  

1510 Parameters 

1511 ---------- 

1512 options : :obj:`~cuda.core.texture.MipmappedArrayOptions` 

1513 Allocation options (shape, format, channels, levels, surface flag). 

1514  

1515 Returns 

1516 ------- 

1517 :obj:`~cuda.core.texture.MipmappedArray` 

1518 Newly created mipmapped array. 

1519  

1520 .. versionadded:: 1.1.0 

1521 """ 

1522 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2#EsFtFuF$EvFADDDSB

1523  

1524 self._check_context_initialized() 2#EsFtFuF$EvFADDDSB

1525 return _create_mipmapped_array(options) 2#EsFtFuF$EvFADDDSB

1526  

1527 def create_texture_object( 

1528 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None 

1529 ) -> TextureObject: 

1530 """Create a :obj:`~cuda.core.texture.TextureObject` on the current device. 

1531  

1532 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` / 

1533 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d 

1534 :obj:`~cuda.core.Buffer`, wrapped in a 

1535 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for 

1536 kernel-side sampled reads. The object is created in the current CUDA 

1537 context, so make this device current with :meth:`set_current` before 

1538 calling (mirroring :meth:`create_stream` / :meth:`create_event`). 

1539  

1540 Note 

1541 ---- 

1542 Device must be initialized. 

1543  

1544 Parameters 

1545 ---------- 

1546 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1547 The memory backing the texture. 

1548 options : :obj:`~cuda.core.texture.TextureObjectOptions` 

1549 Sampling state (address/filter/read modes, normalization, etc.). 

1550  

1551 Returns 

1552 ------- 

1553 :obj:`~cuda.core.texture.TextureObject` 

1554 Newly created texture object. 

1555  

1556 .. versionadded:: 1.1.0 

1557 """ 

1558 from cuda.core.texture._texture import _create_texture_object 2tDuDvDwDxDCD6zDD7zEDFDGDHDwFSB

1559  

1560 self._check_context_initialized() 2tDuDvDwDxDCD6zDD7zEDFDGDHDwFSB

1561 return _create_texture_object(resource, options) 2tDuDvDwDxDCD6zDD7zEDFDGDHDwFSB

1562  

1563 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject: 

1564 """Create a :obj:`~cuda.core.texture.SurfaceObject` on the current device. 

1565  

1566 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a 

1567 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for 

1568 kernel-side typed load/store. The backing array must have been created 

1569 with ``is_surface_load_store=True``. The object is created in the 

1570 current CUDA context, so make this device current with 

1571 :meth:`set_current` before calling (mirroring :meth:`create_stream` / 

1572 :meth:`create_event`). 

1573  

1574 Note 

1575 ---- 

1576 Device must be initialized. 

1577  

1578 Parameters 

1579 ---------- 

1580 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1581 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with 

1582 ``is_surface_load_store=True``. 

1583  

1584 Returns 

1585 ------- 

1586 :obj:`~cuda.core.texture.SurfaceObject` 

1587 Newly created surface object. 

1588  

1589 .. versionadded:: 1.1.0 

1590 """ 

1591 from cuda.core.texture._surface import _create_surface_object 2yDzD5zADBDSB

1592  

1593 self._check_context_initialized() 2yDzD5zADBDSB

1594 return _create_surface_object(resource) 2yDzD5zADBDSB

1595  

1596  

1597cdef inline int Device_ensure_cuda_initialized() except? -1: 

1598 """Initialize CUDA driver and check version compatibility (once per process).""" 

1599 global _is_cuInit 

1600 if _is_cuInit is False: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1601 with _lock, nogil: 

1602 HANDLE_RETURN(cydriver.cuInit(0)) 

1603 _is_cuInit = True 

1604 try: 

1605 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1606 except ImportError: 

1607 pass 

1608 else: 

1609 warn_if_cuda_major_version_mismatch() 

1610 return 0 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1611  

1612  

1613cdef inline int Device_resolve_device_id(device_id) except? -1: 

1614 """Resolve device_id, defaulting to current device or 0.""" 

1615 cdef cydriver.CUdevice dev 

1616 cdef cydriver.CUcontext ctx 

1617 cdef cydriver.CUresult err 

1618 if device_id is None: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1619 with nogil: 2a vrIDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOF2pcrFmGmiFPFBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmcbEBFBYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noC+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXfQl_FwrYfbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=Ctouo1mZf0f(mXlk 7e~y~lgmazOEQEze8e9e,BAe4pVnIckFJctnKcunLc`FMc{FNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,k

1620 err = cydriver.cuCtxGetDevice(&dev) 2a vrIDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOF2pcrFmGmiFPFBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmcbEBFBYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noC+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXfQl_FwrYfbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=Ctouo1mZf0f(mXlk 7e~y~lgmazOEQEze8e9e,BAe4pVnIckFJctnKcunLc`FMc{FNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,k

1621 if err == cydriver.CUresult.CUDA_SUCCESS: 2a vrIDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOF2pcrFmGmiFPFBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmcbEBFBYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noC+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXfQl_FwrYfbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=Ctouo1mZf0f(mXlk 7e~y~lgmazOEQEze8e9e,BAe4pVnIckFJctnKcunLc`FMc{FNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,k

1622 return int(dev) 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOFiFPFjF8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmEBFBYl'D*D;B/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;CBmQl_Fwrbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=C(mXlk ~y~lgmazOEQE,B4pVnIckFJctnKcunLc`FMc{FNc`gOcWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6n7n8n9nsD!n#n$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBWBXBYBZB0B1B2B3B4B5B(B)B*B+B

1623 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1624 with nogil: 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k

1625 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k

1626 assert <void*>(ctx) == NULL 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k

1627 return 0 # cudart behavior 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k

1628 else: 

1629 HANDLE_RETURN(err) 

1630 elif device_id < 0: 2a BrCrDrErFrGrHrIr2lJr3lKrjCLr4lMrNrOrPr5lQrRrSrTrUr6lVrWrXr7lYrZr0r1r2r3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesfsgshs,qis-qjs.qks/qlsmsnsospsprqsqrrssstsusvsws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDdttretft_qgturhtitjtktltmtntotptqtrtstttutvtwtxtytztYpAtSDBtCtDtZpEtVDFtUlGtVlHtItJtKtLtMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t1t2t3t4t5tbr6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i.t%i|l/t:t;t=t?t@tWD[t}l]t*f+f^tvG,f@y-f-B.fkC/f:f;f_t=f8fFf?f9f@f!f[fwG]f^f_f`f{f|f}f~fag`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'n|t}t~taubucuduFmGmXDYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4D.A~C5DeG6Dfu8Dgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psuYl(D)D+D,DbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgll[y.Dtuuuvu/DwuBmfG1pxu|pgGczhG'i:D;D=D?Dyu@D[Dzu]D^D_D`D{D|DAuBuCu}D~DDuEuaEbEcEFudEeEfEgEhEiEGuHujEIukEJuKulEmEnEoEpEqELurEsEtEuEMuvEwENuxEyEOuzEAEBECEDEEEPuQuFEGEHE[iIEJEKELEMENEOEPEQERuzeRE}p~paqbqcqdqeqfqgqhqiqjqkqSu1GIckFJcTuKcUuLcMcNc`gVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6ElbpxqxrxbzsxtxuxeFvxwxxxyxzxfFAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYx7EZx0x1x2x3x4x5x6x7x8xdz9x!x#x$x%x'x(x)x*x+x#E,x-x.x/x:x;x=x?x@xHB[xIB]xJB^xKB_xLB`xMB{x|xNB}xOB~xPBayQBbyRBcydyey5zfygyhyiy6zjyky7zlymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1631 raise ValueError(f"device_id must be >= 0, got {device_id}") 

1632 return device_id 2a BrCrDrErFrGrHrIr2lJr3lKrjCLr4lMrNrOrPr5lQrRrSrTrUr6lVrWrXr7lYrZr0r1r2r3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesfsgshs,qis-qjs.qks/qlsmsnsospsprqsqrrssstsusvsws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDdttretft_qgturhtitjtktltmtntotptqtrtstttutvtwtxtytztYpAtSDBtCtDtZpEtVDFtUlGtVlHtItJtKtLtMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t1t2t3t4t5tbr6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i.t%i|l/t:t;t=t?t@tWD[t}l]t*f+f^tvG,f@y-f-B.fkC/f:f;f_t=f8fFf?f9f@f!f[fwG]f^f_f`f{f|f}f~fag`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'n|t}t~taubucuduFmGmXDYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4D.A~C5DeG6Dfu8Dgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psuYl(D)D+D,DbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgll[y.Dtuuuvu/DwuBmfG1pxu|pgGczhG'i:D;D=D?Dyu@D[Dzu]D^D_D`D{D|DAuBuCu}D~DDuEuaEbEcEFudEeEfEgEhEiEGuHujEIukEJuKulEmEnEoEpEqELurEsEtEuEMuvEwENuxEyEOuzEAEBECEDEEEPuQuFEGEHE[iIEJEKELEMENEOEPEQERuzeRE}p~paqbqcqdqeqfqgqhqiqjqkqSuIckFJcTuKcUuLcMcNc`gVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6ElbpxqxrxbzsxtxuxeFvxwxxxyxzxfFAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYx7EZx0x1x2x3x4x5x6x7x8xdz9x!x#x$x%x'x(x)x*x+x#E,x-x.x/x:x;x=x?x@xHB[xIB]xJB^xKB_xLB`xMB{x|xNB}xOB~xPBayQBbyRBcydyey5zfygyhyiy6zjyky7zlymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1633  

1634  

1635cdef inline list Device_ensure_tls_devices(cls): 

1636 """Ensure thread-local Device singletons exist, creating if needed.""" 

1637 cdef int total 

1638 try: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1639 return _tls.devices 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y

1640 except AttributeError: 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1641 with nogil: 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1642 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1643 devices = _tls.devices = [] 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1644 for dev_id in range(total): 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1645 device = super(Device, cls).__new__(cls) 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1646 device._device_id = dev_id 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1647 device._memory_resource = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1648 device._has_inited = False 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1649 device._properties = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1650 device._resources = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1651 device._uuid = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1652 device._context = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1653 devices.append(device) 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y

1654 return devices 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y